Я новичок в scala и запутался с реализацией Монад. В приведенной ниже программе, когда выполняется «a <- g (3)», значение «a» равно 23, а не Writer, почему? что происходит за сценой? </p>
case class Writer(value:Int, log:String) {
def map(f:Int=>Int): Writer = {
Writer(f(value), log)
}
def flatMap(f:Int=>Writer): Writer = {
val temp = f(value)
Writer(temp.value, log+"...."+temp.log)
}
}
object Test extends App {
def f(value: Int):Writer = {
Writer(40+value, s"f has $value")
}
def g(value: Int):Writer = {
Writer(20+value, s"g has $value")
}
val result1 = for {
a <- g(3)
b <- f(a)
} yield b
println(result1)
val result2 = g(3) flatMap {
a => f(a).map(b=>b)
}
println(result2)
}