anchor.diff:  
   Great the `map` function is allowing a type of function composition, but now what happens when we want to compose more functions that return our functor?
   [source,scala]
  +
   ----
   val f: Int => Int = 
   x => x + 5
  
positive.code: 
  gof(6)
  > true
  ----
  The essence of functional programming is doing this, create programs from composing small functions into larger functions, which provide us with the type safety and the determinism of pure functions. but what happens when we have functions that require to handle a side effect and return the appropriate type constructor?
  [source, scala]
  ----
  val f: Int => Int = 
  
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
  