0
私が(Scalaz)ReaderモナドでトランザクションをラップしたリポジトリAPIがあるとします。今私は、結果を計算し、その結果をリポジトリに保存し直したいと思っています。Scalaのリーダーモナドの結果の連結
repo.run {
for {
all: Seq[Record1] <- Record1Repo.findAll
record: Record <- all
encoding: Encoding <- Processor.encode(record)
_ <- Record2Repo.save(Record2(encoding))
} yield {
logger.info(s"processed record id=${record.id}")
}}
...
type UOW[A] = Reader[Transaction, A]
object Record1Repo {
override def findAll: UOW[Seq[Record1]] = Reader(t => {
...
})
}
しかし、それはrecord <- all
で結果の上にマッピングする無益な試みで崩壊してしまう:私のようなものを試してみました。
私はこのタイプの関数型プログラミングには全く新しいので、自分の意図を正しく表現する方法が見つからなかったのです。どんな提案も大歓迎です。
ダミーモナドの中に 'record < - all'を入れる必要がありますか? – Eddy
'< - 'の右側にあるものが 'UOW [_]'を返すようにする必要があります。 – pierangeloc
だから、私は第2ステップと第3ステップをインラインUOWに投げ捨てました。それはうまくいくようですが、それはかなり醜く、無意味です。 – Eddy