如何指定抽象类型必须在scalaz中实现某些类型类?

时间:2015-07-30 15:06:38

标签: scala monads scalaz

我想编写一个简单地将两个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特征。

1 个答案:

答案 0 :(得分:4)

听起来上下文正是您正在寻找的内容。 f[F[_] : Monad...请参阅What are Scala context and view bounds?