module Control.Monad.Short
( MonadShortable
, MonadErrorShortable
, short
, unShort
, MonadShort(..)
) where
import Control.Monad.Abort
import Control.Monad.Trans.Class
type MonadShortable r m a = AbortT r m a
type MonadErrorShortable m a = MonadShortable String m a
short :: (Monad m) => m a -> MonadShortable r m a
short = lift
unShort :: (Monad m) => MonadShortable r m r -> m r
unShort = runAbortT
class (Monad m) => MonadShort m where
unError :: r -> MonadErrorShortable m a -> MonadShortable r m a
unError_ :: MonadErrorShortable m a -> MonadShortable () m a
unErrorShort :: r -> MonadErrorShortable m r -> m r
unErrorShort_ :: MonadErrorShortable m () -> m ()
unError_ = unError ()
unErrorShort r = unShort . unError r
unErrorShort_ = unShort . unError_