Scalaz 中的 Tower[A] 和 IvoryTower 是什么?
What are Tower[A] and IvoryTower in Scalaz?
当我查看 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]
的参数?
这是一个内部笑话:IvoryTower
是一个名为 RealWorld
的 Haskell 类型的端口。 (我真希望它有一个更清晰的名字——这个名字对新手来说既难以理解又一点也不有趣)。参见例如https://wiki.haskell.org/IO_inside.
当我查看 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]
的参数?
这是一个内部笑话:IvoryTower
是一个名为 RealWorld
的 Haskell 类型的端口。 (我真希望它有一个更清晰的名字——这个名字对新手来说既难以理解又一点也不有趣)。参见例如https://wiki.haskell.org/IO_inside.