创建空列表的 Monad 实例

Create Monad Instance of empty list

我有以下功能:

def map2[F[_]: Monad, A,B,C](fa: F[A], fb: F[B])(f: (A,B) => C): F[C] =
  for {
    v1 <- fa
    v2 <- fb
  } yield f(v1,v2)

def sequence[M[_]: Monad, A](lma: List[M[A]]): M[List[A]] =
  lma.foldRight(List.empty[A].point[M])((z,a) => map2(z,a)(_::_))

是否有更惯用的 scalaz 方法来创建

的实例
List.empty[A].point[M]

我试过Nil.point[M],但没用。

您可以使用 nil[A].point[M],其中 nil 是 Scalaz 提供的一种方法,作为 Nil 的替代方法,具有更合适的类型。我想你可以称它为更地道,但在我的书中 List.empty[A] 完全没问题。