The Functor
.
List(1, 2, 3) > (_ + 1) // List(2, 3, 4) Some(1) > (_ + 1) // Some(2) None > (_ + 1) // None
The Monad
.
Some(7) >>= (x => if(x % 2 == 0) None else Some(x + 1)) // Some(8) Some(8) >>= (x => if(x % 2 == 0) None else Some(x + 1)) // None Some("a").replicate[List](3) // Some(List(a, a, a))
The MonadPlus
.
List(1, 2, 3) <+> List(4, 5, 6) // List(1, 2, 3, 4, 5, 6) Some(7) <+> Some(8) // Some(7) Some(7) <+> None // Some(7)
The Applicative
functor.
Some(7) <*> (None > add2) // None Some(7) <*> (Some(8) > add2) // Some(15) List(1, 2, 3) <*> (List("a", "b") > (s => n => n + s + n)) // List(1a1, 2a2, 3a3, 1b1, 2b2, 3b3)
The Traversable
.
Some("789") traverse ((_: String).map(_ - 48).toList) // List(Some(7), Some(8), Some(9)) List("abc", "def", "ghi") ->> // abcdefghi Array(true, false, false, true, false) ->> // true (using the disjunction monoid)