我想编写一个仅将两个monad绑定在一起的函数,而无需事先确定monad的确切类型(列表,State 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
似乎不是正确的方法,因为State,List等类型是monads并不能扩展Monad特质。
听起来上下文限制正是您要寻找的。f[F[_] : Monad...
请参阅什么是Scala上下文和视图范围?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句