Fun with Eithers

I think this warrants its own name. I proposed this interface:

newtype EarlyT r m a = EarlyT (m (Either r a)) deriving Functor

instance Monad m => Applicative (EarlyT r m) where ...
instance Monad m => Monad (EarlyT r m) where ...
instance MonadTrans (EarlyT r) where ...

earlyReturn :: Applicative m => r -> EarlyT r m a
earlyReturn = EarlyT . pure . Left

runEarlyT :: Monad m => EarlyT a m a -> m a
runEarlyT (EarlyT m) = m >>= either pure pure