如何指定抽象类型必须在 scalaz 中实现某些类型类?
How to specify that abstract types must implement certain typeclasses in scalaz?
我想编写一个简单地将两个 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
似乎不是正确的方法,因为 State、List 等类型......它们是 monad 不扩展 Monad 特征。
听起来上下文边界正是您要查找的内容。 f[F[_] : Monad...
参见 What are Scala context and view bounds?
我想编写一个简单地将两个 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
似乎不是正确的方法,因为 State、List 等类型......它们是 monad 不扩展 Monad 特征。
听起来上下文边界正是您要查找的内容。 f[F[_] : Monad...
参见 What are Scala context and view bounds?