Объясните реализацию Traverse[List] в scalaz-seven

Я пытаюсь понять реализацию 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.

7
задан betehess 15 March 2012 в 04:16
поделиться