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