concrete functor and monad transformers

#50Does `Applicative (MaybeT m)` really need the `Monad` constraint?

Basically, instead of the existing Applicative implementation for MaybeT that relies on >>= and return, I think it could be defined as such:

instance (Applicative m) => Applicative (MaybeT m) where
    pure = MaybeT . pure . Just
    mf <*> mx = let f = fmap (<*>) (runMaybeT mf) in MaybeT $ f <*> runMaybeT mx

I think the same goes for a few others as well (eg, EitherT). But perhaps there is some good reason for using bind/Monad instead?