http://hseeberger.wordpress.com/2011/01/31/applicatives-are-generalized-functors/