Last active
September 29, 2015 00:37
-
-
Save manjuraj/5982372066e70692fea6 to your computer and use it in GitHub Desktop.
scalaz type constructors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Foldable | |
// - fold a data structure | |
// - usually, fold F[A] given a Monoid[A] | |
// | |
trait Foldable[F[_]] { self => | |
def foldRight[A, B](fa: F[A], z: => B)(f: (A, => B) => B): B | |
def foldLeft[A, B](fa: F[A], z: B)(f: (B, A) => B): B = { | |
def foldMap[A,B](fa: F[A])(f: A => B)(implicit F: Monoid[B]): B | |
... | |
} | |
// | |
// Functor | |
// - map lifts a function f into functor F and applies it | |
// to the value within functor F i.e. F[A] | |
// | |
trait Functor[F[_]] extends InvariantFunctor[F] { self => | |
def map[A, B](fa: F[A])(f: A => B): F[B] | |
... | |
} | |
// | |
// Apply | |
// - ap takes a functor that that has a function in it and another | |
// functor and extracts that function from the first functor and | |
// then maps it over the second one | |
// | |
trait Apply[F[_]] extends Functor[F] { self => | |
def ap[A, B](fa: => F[A])(f: => F[A => B]): F[B] | |
... | |
} | |
// | |
// Applicative | |
// | |
trait Applicative[F[_]] extends Apply[F] { self => | |
def point[A](a: => A): F[A] | |
final def pure[A](a: => A): F[A] = point(a) | |
... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment