什么是Scalaz的Tower [A]和IvoryTower?

时间:2015-03-26 09:28:48

标签: scala scalaz io-monad

当我查看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接受Tower[IvoryTower]类型的参数?

1 个答案:

答案 0 :(得分:7)

这是一个笑话:IvoryTower是名为RealWorld的Haskell类型的端口。 (我确实希望它有一个更清晰的名字 - 这个名字对新手来说既难以穿透,又实际上并不好笑)。参见例如https://wiki.haskell.org/IO_inside