newtype StackedMonad m n a = MkStackedMonad {} |
|
liftOuter :: (Functor m, HasReturn n) => m a -> StackedMonad m n a |
|
liftInner :: HasReturn m => n a -> StackedMonad m n a |
|
throwInner :: (HasReturn m, MonadThrow ex n) => ex -> StackedMonad m n a |
|
throwOuter :: MonadThrow ex m => ex -> StackedMonad m n a |
|
catchInner :: (Monad m, MonadException ex n, ExtractableFunctor n) => StackedMonad m n a -> (ex -> StackedMonad m n a) -> StackedMonad m n a |
|
catchOuter :: MonadException ex m => StackedMonad m n a -> (ex -> StackedMonad m n a) -> StackedMonad m n a |
|
runMonadOr :: Monad m => (StackedMonad m Maybe a -> StackedMonad m Maybe b) -> m (Maybe a) -> m (Maybe b) |
|
runMonadPlus :: Monad m => (StackedMonad m [] a -> StackedMonad m [] b) -> m [a] -> m [b] |