Monadic wrapper

I'm not really sure about this yet because the Applicative and Monad semantics differ - the applicative evaluates all the actions then checks for bad exit codes while the monad checks before going on to the next action.  To make them the same the Applicative instance would have to have a Monad m requirement instead of Applicative m.  What do you think?  I'm also not really sure of the Alternative and MonadPlus instances, especially because their empty/mzero values are ExitSuccess.