[Haskell] Composing applicative functors?