Если вы хотите использовать для понимания (например, с помощью intellij или от руки)
вы получите
{
1.pure[WriterString]
.flatMap(
x =>
tell(List("een")).flatMap {
case _ =>
2.pure[WriterString]
.flatMap(
y =>
tell(List("twee")).flatMap {
case _ =>
3.pure[WriterString]
.flatMap(z => tell(List("drie")).map { case _ => (x, y, z) })
}
)
}
)
}.run()
Примечание _
(подчеркивание) в кейсах, они в основном означают, что мы не заботимся о значении. И, в частности, здесь нам все равно, потому что tell
возвращает Writer со значением типа Unit
.
def tell[W](m:W)(implicit monoid:Monoid[W]):Writer[W, Unit] = ???
А tell
происходит от импорта import learnfp.functor.Writer._
WriterString
- это псевдоним типа для Writer
, который можно преобразовать в FunctorOps
(который, вероятно, имеет метод map
) - https://github.com/dehun/learn-fp/blob/master/src/main/scala/learnfp/functor/Writer.scala#L16