我想编写一个简单地将两个monad绑定在一起的函数,而不事先确定monad(Lists,State monads等)的确切类型。在我看来,这种通用性是类型类如此强大的原因,我应该能够用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
似乎不是正确的方法,因为类型State,List等... monad不会扩展Monad特征。