{-# OPTIONS -fno-warn-orphans #-} module Control.Monad.Ology.Specific.ContT ( module Control.Monad.Trans.Cont , module Control.Monad.Ology.Specific.ContT ) where import Control.Monad.Ology.General import Control.Monad.Ology.Specific.ReaderT import Control.Monad.Ology.Specific.StateT import Control.Monad.Trans.Cont hiding (callCC) import qualified Control.Monad.Trans.Cont as T import Import instance TransConstraint Functor (ContT s) where hasTransConstraint :: forall (m :: Type -> Type). Functor m => Dict (Functor (ContT s m)) hasTransConstraint = forall (a :: Constraint). a => Dict a Dict instance TransConstraint Applicative (ContT s) where hasTransConstraint :: forall (m :: Type -> Type). Applicative m => Dict (Applicative (ContT s m)) hasTransConstraint = forall (a :: Constraint). a => Dict a Dict instance TransConstraint Monad (ContT s) where hasTransConstraint :: forall (m :: Type -> Type). Monad m => Dict (Monad (ContT s m)) hasTransConstraint = forall (a :: Constraint). a => Dict a Dict instance TransConstraint MonadIO (ContT s) where hasTransConstraint :: forall (m :: Type -> Type). MonadIO m => Dict (MonadIO (ContT s m)) hasTransConstraint = forall (a :: Constraint). a => Dict a Dict instance TransConstraint MonadFail (ContT s) where hasTransConstraint :: forall (m :: Type -> Type). MonadFail m => Dict (MonadFail (ContT s m)) hasTransConstraint = forall (a :: Constraint). a => Dict a Dict instance forall k (r :: k) (m :: k -> Type). MonadCont (ContT r m) where callCC :: forall a b. ((a -> ContT r m b) -> ContT r m a) -> ContT r m a callCC = forall {k} a (r :: k) (m :: k -> Type) b. ((a -> ContT r m b) -> ContT r m a) -> ContT r m a T.callCC instance MonadTransCoerce (ContT r) where transCoerce :: forall (m1 :: Type -> Type) (m2 :: Type -> Type). Coercible m1 m2 => Dict (Coercible (ContT r m1) (ContT r m2)) transCoerce = forall (a :: Constraint). a => Dict a Dict updateContT :: (m r -> m r) -> ContT r m () updateContT :: forall {k} (m :: k -> Type) (r :: k). (m r -> m r) -> ContT r m () updateContT m r -> m r m = forall {k} (r :: k) (m :: k -> Type) a. ((a -> m r) -> m r) -> ContT r m a ContT forall a b. (a -> b) -> a -> b $ \() -> m r umr -> m r -> m r m forall a b. (a -> b) -> a -> b $ () -> m r umr () stateToReaderContT :: Monad m => StateT s m a -> ContT r (ReaderT s m) a stateToReaderContT :: forall (m :: Type -> Type) s a r. Monad m => StateT s m a -> ContT r (ReaderT s m) a stateToReaderContT (StateT s -> m (a, s) sma) = forall {k} (r :: k) (m :: k -> Type) a. ((a -> m r) -> m r) -> ContT r m a ContT forall a b. (a -> b) -> a -> b $ \a -> ReaderT s m r c -> forall r (m :: Type -> Type) a. (r -> m a) -> ReaderT r m a ReaderT forall a b. (a -> b) -> a -> b $ \s olds -> do (a a, s news) <- s -> m (a, s) sma s olds forall r (m :: Type -> Type) a. ReaderT r m a -> r -> m a runReaderT (a -> ReaderT s m r c a a) s news hoistContT :: (m1 r1 -> m2 r2) -> (m2 r2 -> m1 r1) -> ContT r1 m1 a -> ContT r2 m2 a hoistContT :: forall {k} {k} (m1 :: k -> Type) (r1 :: k) (m2 :: k -> Type) (r2 :: k) a. (m1 r1 -> m2 r2) -> (m2 r2 -> m1 r1) -> ContT r1 m1 a -> ContT r2 m2 a hoistContT m1 r1 -> m2 r2 m12 m2 r2 -> m1 r1 m21 (ContT (a -> m1 r1) -> m1 r1 amrmr) = forall {k} (r :: k) (m :: k -> Type) a. ((a -> m r) -> m r) -> ContT r m a ContT forall a b. (a -> b) -> a -> b $ \a -> m2 r2 c -> m1 r1 -> m2 r2 m12 forall a b. (a -> b) -> a -> b $ (a -> m1 r1) -> m1 r1 amrmr (m2 r2 -> m1 r1 m21 forall {k} (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . a -> m2 r2 c)