蹦床作为教练

时间:2014-06-24 09:59:04

标签: scala functional-programming functor trampolines

我试图将Trampoline [+ A]演示为Functor(即提供map [B](f:A => B))。 我理解蹦床作为Monad的经典实现,如Stackless Scala中所述。
但是,有没有办法用Trampoline的Done和More子类实现 map 函数(而不是 flatMap),或者我是否需要添加Flatmap子类也是?

1 个答案:

答案 0 :(得分:1)

你不能让Trampoline代表一个计算过程。 Functor为您提供了一个map函数,它只能转换您的最终值,但生成一个新计算是Monads的一个工作,它以某种方式在计算过程中进行抽象,使用flatMap操作(虽然我绝对更喜欢Haskell bind名称,因为它更好地表示操作的实际语义)。所以使用仿函数你不能将不同的计算部分链接在一起,例如在scalaz中Trampoline是Free Monad的别名,它定义了这样的地图:

def map[B](f: A => B): Free[S, B] =
    flatMap(a => Return(f(a)))

正如您所看到的那样,它只会转换一个值,但不会附加一个新步骤,您想要使用Trampolines实现的目标。

相关问题