{-# LANGUAGE CPP, RankNTypes #-} module Control.Monad.Trans.AnyCont where import LLVM.Prelude import Control.Monad.Catch import Control.Monad.Cont as Cont import Control.Monad.Fail as Fail newtype AnyContT m a = AnyContT { AnyContT m a -> forall r. ContT r m a unAnyContT :: forall r . ContT r m a } instance Functor (AnyContT m) where fmap :: (a -> b) -> AnyContT m a -> AnyContT m b fmap f :: a -> b f p :: AnyContT m a p = (forall r. ContT r m b) -> AnyContT m b forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT ((forall r. ContT r m b) -> AnyContT m b) -> (forall r. ContT r m b) -> AnyContT m b forall a b. (a -> b) -> a -> b $ (a -> b) -> ContT r m a -> ContT r m b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap a -> b f (ContT r m a -> ContT r m b) -> (AnyContT m a -> ContT r m a) -> AnyContT m a -> ContT r m b forall b c a. (b -> c) -> (a -> b) -> a -> c . AnyContT m a -> ContT r m a forall (m :: * -> *) a. AnyContT m a -> forall r. ContT r m a unAnyContT (AnyContT m a -> ContT r m b) -> AnyContT m a -> ContT r m b forall a b. (a -> b) -> a -> b $ AnyContT m a p instance Applicative (AnyContT m) where pure :: a -> AnyContT m a pure a :: a a = (forall r. ContT r m a) -> AnyContT m a forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT ((forall r. ContT r m a) -> AnyContT m a) -> (forall r. ContT r m a) -> AnyContT m a forall a b. (a -> b) -> a -> b $ a -> ContT r m a forall (f :: * -> *) a. Applicative f => a -> f a pure a a f :: AnyContT m (a -> b) f <*> :: AnyContT m (a -> b) -> AnyContT m a -> AnyContT m b <*> v :: AnyContT m a v = (forall r. ContT r m b) -> AnyContT m b forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT ((forall r. ContT r m b) -> AnyContT m b) -> (forall r. ContT r m b) -> AnyContT m b forall a b. (a -> b) -> a -> b $ AnyContT m (a -> b) -> forall r. ContT r m (a -> b) forall (m :: * -> *) a. AnyContT m a -> forall r. ContT r m a unAnyContT AnyContT m (a -> b) f ContT r m (a -> b) -> ContT r m a -> ContT r m b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> AnyContT m a -> forall r. ContT r m a forall (m :: * -> *) a. AnyContT m a -> forall r. ContT r m a unAnyContT AnyContT m a v instance Monad m => Monad (AnyContT m) where AnyContT f :: forall r. ContT r m a f >>= :: AnyContT m a -> (a -> AnyContT m b) -> AnyContT m b >>= k :: a -> AnyContT m b k = (forall r. ContT r m b) -> AnyContT m b forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT ((forall r. ContT r m b) -> AnyContT m b) -> (forall r. ContT r m b) -> AnyContT m b forall a b. (a -> b) -> a -> b $ ContT r m a forall r. ContT r m a f ContT r m a -> (a -> ContT r m b) -> ContT r m b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= AnyContT m b -> ContT r m b forall (m :: * -> *) a. AnyContT m a -> forall r. ContT r m a unAnyContT (AnyContT m b -> ContT r m b) -> (a -> AnyContT m b) -> a -> ContT r m b forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> AnyContT m b k return :: a -> AnyContT m a return a :: a a = (forall r. ContT r m a) -> AnyContT m a forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT ((forall r. ContT r m a) -> AnyContT m a) -> (forall r. ContT r m a) -> AnyContT m a forall a b. (a -> b) -> a -> b $ a -> ContT r m a forall (m :: * -> *) a. Monad m => a -> m a return a a #if !(MIN_VERSION_base(4,13,0)) fail s = AnyContT (ContT (\_ -> Cont.fail s)) #endif instance MonadFail m => MonadFail (AnyContT m) where fail :: String -> AnyContT m a fail s :: String s = (forall r. ContT r m a) -> AnyContT m a forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT (((a -> m r) -> m r) -> ContT r m a forall k (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (\_ -> String -> m r forall (m :: * -> *) a. MonadFail m => String -> m a Fail.fail String s)) instance MonadIO m => MonadIO (AnyContT m) where liftIO :: IO a -> AnyContT m a liftIO = m a -> AnyContT m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> AnyContT m a) -> (IO a -> m a) -> IO a -> AnyContT m a forall b c a. (b -> c) -> (a -> b) -> a -> c . IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO instance MonadTrans AnyContT where lift :: m a -> AnyContT m a lift ma :: m a ma = (forall r. ContT r m a) -> AnyContT m a forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT (m a -> ContT r m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m a ma) instance MonadThrow m => MonadThrow (AnyContT m) where throwM :: e -> AnyContT m a throwM = 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 (m :: * -> *) e a. (MonadThrow m, Exception e) => e -> m a throwM runAnyContT :: AnyContT m a -> (forall r . (a -> m r) -> m r) runAnyContT :: AnyContT m a -> forall r. (a -> m r) -> m r runAnyContT = ContT r m a -> (a -> m r) -> m r forall k (r :: k) (m :: k -> *) a. ContT r m a -> (a -> m r) -> m r runContT (ContT r m a -> (a -> m r) -> m r) -> (AnyContT m a -> ContT r m a) -> AnyContT m a -> (a -> m r) -> m r forall b c a. (b -> c) -> (a -> b) -> a -> c . AnyContT m a -> ContT r m a forall (m :: * -> *) a. AnyContT m a -> forall r. ContT r m a unAnyContT anyContT :: (forall r . (a -> m r) -> m r) -> AnyContT m a anyContT :: (forall r. (a -> m r) -> m r) -> AnyContT m a anyContT f :: forall r. (a -> m r) -> m r f = (forall r. ContT r m a) -> AnyContT m a forall (m :: * -> *) a. (forall r. ContT r m a) -> AnyContT m a AnyContT (((a -> m r) -> m r) -> ContT r m a forall k (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (a -> m r) -> m r forall r. (a -> m r) -> m r f) withAnyContT :: (forall r . (b -> m r) -> (a -> m r)) -> AnyContT m a -> AnyContT m b withAnyContT :: (forall r. (b -> m r) -> a -> m r) -> AnyContT m a -> AnyContT m b withAnyContT f :: forall r. (b -> m r) -> a -> m r f m :: AnyContT m a m = (forall r. (b -> m r) -> m r) -> AnyContT m b forall a (m :: * -> *). (forall r. (a -> m r) -> m r) -> AnyContT m a anyContT ((forall r. (b -> m r) -> m r) -> AnyContT m b) -> (forall r. (b -> m r) -> m r) -> AnyContT m b forall a b. (a -> b) -> a -> b $ AnyContT m a -> forall r. (a -> m r) -> m r forall (m :: * -> *) a. AnyContT m a -> forall r. (a -> m r) -> m r runAnyContT AnyContT m a m ((a -> m r) -> m r) -> ((b -> m r) -> a -> m r) -> (b -> m r) -> m r forall b c a. (b -> c) -> (a -> b) -> a -> c . (b -> m r) -> a -> m r forall r. (b -> m r) -> a -> m r f mapAnyContT :: (forall r . m r -> m r) -> AnyContT m a -> AnyContT m a mapAnyContT :: (forall r. m r -> m r) -> AnyContT m a -> AnyContT m a mapAnyContT f :: forall r. m r -> m r f m :: AnyContT m a m = (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 $ m r -> m r forall r. m r -> m r f (m r -> m r) -> ((a -> m r) -> m r) -> (a -> m r) -> m r forall b c a. (b -> c) -> (a -> b) -> a -> c . AnyContT m a -> forall r. (a -> m r) -> m r forall (m :: * -> *) a. AnyContT m a -> forall r. (a -> m r) -> m r runAnyContT AnyContT m a m