【发布时间】:2015-07-30 15:06:38
【问题描述】:
我想编写一个简单地将两个 monad 绑定在一起的函数,而无需预先确定 monad 的确切类型(列表、状态 monad 等)。在我看来,这种通用性是类型类如此强大的原因,我应该能够使用 Scalaz 来做到这一点。这是我的想法:
def f[F[_], A](m1: F[A], m2: F[A]): F[(A,A)] =
m1 >>= { a: A => m2.map{ b: A => (a,b) }}
如何指定 F[_] 必须实现 Monad 类型类,以便我可以在我的函数中使用 >>=?写F[_] <: Monad 似乎不是正确的方法,因为作为monad 的State、List 等类型不会扩展Monad 特征。
【问题讨论】: