Zhe*_*lov 8 scala scalaz io-monad
当我查看scalaz.effect.IO
源代码时,我注意到它有一个apply
带有以下签名的方法:
sealed trait IO[A] {
def apply(rw: Tower[IvoryTower]): Trampoline[(Tower[IvoryTower], A)]
}
Run Code Online (Sandbox Code Playgroud)
Tower[A]
并IvoryTower
定义为:
case class Tower[A]()
sealed trait IvoryTower
Run Code Online (Sandbox Code Playgroud)
有一个例子Tower
:
object IvoryTower extends IvoryTowers
trait IvoryTowers {
val ivoryTower = Tower[IvoryTower]()
}
Run Code Online (Sandbox Code Playgroud)
这些课程的目的是什么?为什么IO.apply
接受类型的参数Tower[IvoryTower]
?
这是一个笑话:IvoryTower
是一个叫做Haskell类型的端口RealWorld
.(我确实希望它有一个更清晰的名字 - 这个名字对新手来说既难以穿透,又实际上并不好笑).参见例如https://wiki.haskell.org/IO_inside.
归档时间: |
|
查看次数: |
198 次 |
最近记录: |