Applicative Programming
- Applicative functors
- Disjoint unions (return This or That, Success or Failure, like Scala's Either)
- Semigroups/Monoids (used here to accumulate error messages)
- Non-breaking error handling
Inspired by: http://dl.dropboxusercontent.com/u/7810909/docs/applicative-errors-scala/applicative-errors-scala/html/index.html