anchor.diff:  [source,scala]
   ----
   trait Monad[F[_]] extends Functor[F] {
  -	def pure[A](a: A): F[A]
  -	def map[A, B](M: F[A])(f: A => B): F[B] = flatMap(M)(x => pure(f(x)))
  -	def flatMap[A, B](M: F[A])(f: A => F[B]): F[B]
  +def pure[A](a: A): F[A]
  +def map[A, B](M: F[A])(f: A => B): F[B] =
  +flatMap(M)(x => pure(f(x)))
  +def flatMap[A, B](M: F[A])(f: A => F[B]): F[B]
   }
   ----
   = Left identity:
   If we lift a pure value, and then flatMap with a monadic function (a function with the signature `A => F[A]` where `A` is a pure value and `F[_]` a Monad type constructor) then that must be equal to just passing the pure value through the monadic function:
  -
   [source,scala]
   ----
   pure(a).flatMap(f) === f(a)
   ----
  -
   = Right identity:	
   If we take a monadic value `m` (a pure value that has been lifted to the context of a monad, has signature `M[A]`) and flatMap the `pure` function from it, that must be equal to the original `m`:
  -
   [source,scala]
   ----
   m.flatMap(pure) === m
   ----
  -
   = Associativity:	
  -
   Let `m` be a monadic value, and `f` and `g` monadic functions, then it must be that flat mapping `f` and then `g` be equal to composing `f` and `g` first (using flatMap) and then using the resulting monadic function to flatMap from `m`:
  -
   [source,scala]
   ----
   m.flatMap(f).flatMap(g) === m.flatMap(\x => f(x).flatMap g)
  
positive.code: found   : Int => Option[Int] required: ? => Int 
  f compose filter
  ----
  
  On this case our `map` function from our functor can help us:
  
  [source,scala]
  ----
  val sumIfMoreThan10: Int => Option[Int] =	x => filter10(x).map(f)
  
negative.code: val total: Int => Option[Int] = 
  x => sumIfPositive(6).map(sumIfMoreThan10)
  ----
  Oh no, we have a problem, we cannot compose side effects only using `map`, we need a new mechanism for combination. Lets do it then! lets introduce a function similar to `map` but called `flatMap`! (Because it will 'flatten' the structure between two functors.)
  
  == Monads! The Combinator We Were Looking For
  