llvm-party-12.1.0: src/Control/Monad/AnyCont.hs
{-# LANGUAGE
MultiParamTypeClasses,
UndecidableInstances
#-}
module Control.Monad.AnyCont (
MonadAnyCont(..),
ScopeAnyCont(..),
AnyContT(..),
MonadTransAnyCont(..),
runAnyContT, runAnyContT',
withAnyContT,
mapAnyContT
) where
import Prelude
import Control.Monad.Trans.AnyCont
import Control.Monad.AnyCont.Class
import Control.Monad.Trans.Class
import Control.Monad.State.Class
import Control.Monad.Error.Class
instance MonadState s m => MonadState s (AnyContT m) where
get = lift get
{-# INLINE get #-}
put = lift . put
{-# INLINE put #-}
state = lift . state
{-# INLINE state #-}
instance MonadError e m => MonadError e (AnyContT m) where
throwError = lift . throwError
{-# INLINE throwError #-}
x `catchError` h = anyContT $ \f -> (runAnyContT x f) `catchError` (\e -> runAnyContT (h e) f)