Я пытаюсь понять реализацию traverseImpl
в scalaz-seven:
def traverseImpl[F[_], A, B](l: List[A])(f: A => F[B])(implicit F: Applicative[F]) = {
DList.fromList(l).foldr(F.point(List[B]())) {
(a, fbs) => F.map2(f(a), fbs)(_ :: _)
}
}
Может кто-нибудь объяснить, как List
взаимодействует с Applicative
. В конечном счете, я хотел бы иметь возможность реализовать другие экземпляры для Traverse
.