【发布时间】:2020-09-22 21:01:28
【问题描述】:
我希望在不运行它们的情况下将 Writer Monad 列表从猫折叠到一位大作家。 例如:
import cats.data.Writer
import cats.instances.vector._
import cats.instances.list._
import cats.instances.tuple._
import cats.Foldable
val result = for {
i <- Writer(Vector("hello"), Vector(1))
j <- Writer(Vector("bye"), Vector(2))
} yield j
val result2 = for {
x <- Writer(Vector("hi"), Vector(33))
y <- Writer(Vector("ciao"), Vector(55))
} yield y
val l = List(result, result2)
val result3 = for {
t <- result
z <- result2
} yield z // Success !!!
val l = List(result, result2)
// Logically:
// val result3 = for {
// r <- l
// o <- r
// } yield o
// But will not compile without Monad Transformer
// With run
val l1: List[(Vector[String], Vector[Int])] = l.map(_.run)
val result5 = Foldable[List].combineAll(l1)
我相信这种组合必须有一个功能构造,而无需运行 Writers
【问题讨论】:
-
您期望的输入和输出是什么?你在寻找类似
List[WriterT[F,L,V]] => WriterT[F,L,V]的东西吗? -
那么
running 和WriterT的预期输出会是(Vector("hello", "bye", "hi", "ciao"), Vector(55))吗?
标签: scala scala-cats writer-monad