{-# LANGUAGE MultiParamTypeClasses, UndecidableInstances #-} module Control.Monad.AnyCont ( MonadAnyCont(..), ScopeAnyCont(..), AnyContT(..), MonadTransAnyCont(..), 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 :: AnyContT m s get = m s -> AnyContT m s forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m s forall s (m :: * -> *). MonadState s m => m s get put :: s -> AnyContT m () put = m () -> AnyContT m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> AnyContT m ()) -> (s -> m ()) -> s -> AnyContT m () forall b c a. (b -> c) -> (a -> b) -> a -> c . s -> m () forall s (m :: * -> *). MonadState s m => s -> m () put state :: (s -> (a, s)) -> AnyContT m a state = m a -> AnyContT m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> AnyContT m a) -> ((s -> (a, s)) -> m a) -> (s -> (a, s)) -> AnyContT m a forall b c a. (b -> c) -> (a -> b) -> a -> c . (s -> (a, s)) -> m a forall s (m :: * -> *) a. MonadState s m => (s -> (a, s)) -> m a state instance MonadError e m => MonadError e (AnyContT m) where throwError :: e -> AnyContT m a throwError = m a -> AnyContT m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> AnyContT m a) -> (e -> m a) -> e -> AnyContT m a forall b c a. (b -> c) -> (a -> b) -> a -> c . e -> m a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError x :: AnyContT m a x catchError :: AnyContT m a -> (e -> AnyContT m a) -> AnyContT m a `catchError` h :: e -> AnyContT m a h = (forall r. (a -> m r) -> m r) -> AnyContT m a forall a (m :: * -> *). (forall r. (a -> m r) -> m r) -> AnyContT m a anyContT ((forall r. (a -> m r) -> m r) -> AnyContT m a) -> (forall r. (a -> m r) -> m r) -> AnyContT m a forall a b. (a -> b) -> a -> b $ \f :: a -> m r f -> (AnyContT m a -> (a -> m r) -> m r forall (m :: * -> *) a. AnyContT m a -> forall r. (a -> m r) -> m r runAnyContT AnyContT m a x a -> m r f) m r -> (e -> m r) -> m r forall e (m :: * -> *) a. MonadError e m => m a -> (e -> m a) -> m a `catchError` (\e :: e e -> AnyContT m a -> (a -> m r) -> m r forall (m :: * -> *) a. AnyContT m a -> forall r. (a -> m r) -> m r runAnyContT (e -> AnyContT m a h e e) a -> m r f)