8

当我查看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]

4

1 回答 1

7

这是一个笑话:IvoryTower是一个 Haskell 类型的端口,称为RealWorld. (我真希望它有一个更清晰的名字——这个名字对新手来说既难以理解,也并不有趣)。参见例如https://wiki.haskell.org/IO_inside

于 2015-03-26T10:16:07.220 回答