我有以下功能:
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]
,但这不起作用。
答案 0 :(得分:3)
您可以使用nil[A].point[M]
,其中nil
是Scalaz提供的方法,可以替代Nil
更合适的类型。我想你可以称之为更惯用,但在我的书中List.empty[A]
完全没问题。