There was a related discussion on haskell-cafe a year ago. In the Reddit comments I gave an example of a natural transformation (g) from IO to another monad that is an applicative functor morphism (i.e., satisfies the laws that Gabriel Gonzalez mentioned) but is not a monad morphism (it does not satisfy the additional law relating to >>=). So, even in a world with AMP, ApplicativeIO m and MonadIO m are really different things, even when m is a Monad!
In an ideal world you'd have a setup like this:
class Functor f => FunctorIO f where
liftIO :: IO a -> f a
-- such that liftIO is a natural transformation (automatic, by parametricity)
class (Applicative f, FunctorIO f) => ApplicativeIO f where
-- ... and liftIO is an applicative functor morphism
class (Monad f, ApplicativeIO f) => MonadIO f where
-- ... and liftIO is a monad morphism
and magical fairies would define ApplicativeIO and MonadIO instances exactly when the corresponding laws were satisfied.