当我查看scalaz.effect.IO
源代码时,我注意到它有一个apply
具有以下签名的方法:
sealed trait IO[A] {
def apply(rw: Tower[IvoryTower]): Trampoline[(Tower[IvoryTower], A)]
}
Tower[A]
并IvoryTower
定义为:
case class Tower[A]()
sealed trait IvoryTower
有一个实例Tower
:
object IvoryTower extends IvoryTowers
trait IvoryTowers {
val ivoryTower = Tower[IvoryTower]()
}
这些课程的目的是什么?为什么IO.apply
接受 type 的参数Tower[IvoryTower]
?