Cats - 当范围内的Monad`实例时如何使用for -reherehe?

问题描述 投票:4回答:1

如何在下面的方法中使用M类型的理解?

def foo[M[_]: Monad](m1: M[Int], m2: M[Int]) =
  for {
     a <- m1
     b <- m2
  } yield (a + b)

我会得到一个

value flatMap is not a member of type parameter M[Int]

我可以通过定义flatMapmap方法来实现它:

implicit class MOps[A](m: M[A])(implicit monad: Monad[M]) {
  def flatMap[B](f: A => M[B]): M[B] = monad.flatMap(m)(f)
  def map[B](f: A => B): M[B]        = monad.map(m)(f)
}

但是肯定有必要让Cats提供这些方法吗?

scala scala-cats for-comprehension
1个回答
14
投票

尝试:

import cats.syntax.functor._, cats.syntax.flatMap._
© www.soinside.com 2019 - 2024. All rights reserved.