An applicative functor is any covariant pointed functor that also takes the form: M[A] => M[A => B] => M[B]
M[A] => M[A => B] => M[B]
e.g. List[A] => List[A => B] => List[B]
List[A] => List[A => B] => List[B]