def mapReduce[F[_], A, B](as: F[A])(f: A => B)
(implicit fd: Foldable[F], m: Monoid[B]) = fd.foldMap(as)(f)
---
trait Applicative[F[_]] extends Functor[F] {
def ap[A,B](fa: => F[A])(f: => F[A => B]): F[B]
def apply2[A,B,C](fa: F[A], fb: F[B])(f: (A, B) => C): F[C] =
ap(fb)(map(fa)(f.curried))
def lift2[A,B,C](f: (A, B) => C): (F[A], F[B]) => F[C] =
apply2(_, _)(f)
def unit[A](a: => A): F[A]
}
---
def traverse[F[_]: Functor, G[_]:Applicative, A, B](fa: F[A])
(f: A => G[B])(implicit l: Foldable[F]): G[F[B]] = …
最近我看了一本编程书用的scala,很多类似这样的代码,它的函数定义十分复杂,想干啥我都看不出来,无法进一步学习了,求问怎样才能理解?
(implicit fd: Foldable[F], m: Monoid[B]) = fd.foldMap(as)(f)
---
trait Applicative[F[_]] extends Functor[F] {
def ap[A,B](fa: => F[A])(f: => F[A => B]): F[B]
def apply2[A,B,C](fa: F[A], fb: F[B])(f: (A, B) => C): F[C] =
ap(fb)(map(fa)(f.curried))
def lift2[A,B,C](f: (A, B) => C): (F[A], F[B]) => F[C] =
apply2(_, _)(f)
def unit[A](a: => A): F[A]
}
---
def traverse[F[_]: Functor, G[_]:Applicative, A, B](fa: F[A])
(f: A => G[B])(implicit l: Foldable[F]): G[F[B]] = …
最近我看了一本编程书用的scala,很多类似这样的代码,它的函数定义十分复杂,想干啥我都看不出来,无法进一步学习了,求问怎样才能理解?