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