Inspired by: http://dl.dropboxusercontent.com/u/7810909/docs/applicative-errors-scala/applicative-errors-scala/html/index.html