0
比方说,我有一些Repository API,我已经在(Scalaz)阅读器monad中封装了这些事务。现在我想对结果运行计算,并将结果保存回存储库。我想是这样的:Scala中阅读器monads的链接结果
type UOW[A] = Reader[Transaction, A]
object Record1Repo {
override def findAll: UOW[Seq[Record1]] = Reader(t => {
...
})
}
...
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}")
}}
但它与妄图在映射的结果record <- all
分崩离析。
我对这种类型的函数式编程还很陌生,无法正确地表达我的意图。任何建议,欢迎。
对,所以我需要在虚拟monad中填充'record < - all'? – Eddy
您需要确保'<-'右侧的内容返回'UOW [_]'。 – pierangeloc
所以,我把第二步和第三步放到了一个内联UOW中,它似乎可以工作,但它非常丑陋,毫无意义......这是否是“提升”? – Eddy