创建空列表的Monad实例

时间:2015-04-12 21:52:11

标签: scala scalaz

我有以下功能:

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)(_::_))

是否有更多的idomatic scalaz方法来创建

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

我尝试了Nil.point[M],但这不起作用。

1 个答案:

答案 0 :(得分:3)

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