{-# OPTIONS_GHC -Wno-orphans #-} module Control.Monad.Class.MonadST.Trans () where import Control.Monad.Cont (ContT) import Control.Monad.Except (ExceptT) import qualified Control.Monad.RWS.Lazy as Lazy import qualified Control.Monad.RWS.Strict as Strict import qualified Control.Monad.State.Lazy as Lazy import qualified Control.Monad.State.Strict as Strict import Control.Monad.Trans (lift) import qualified Control.Monad.Writer.Lazy as Lazy import qualified Control.Monad.Writer.Strict as Strict import Control.Monad.Class.MonadST instance MonadST m => MonadST (ContT r m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> ContT r m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> ContT r m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> ContT r m a) -> b forall s. (forall a. ST s a -> ContT r m a) -> b f (m a -> ContT r m a forall (m :: * -> *) a. Monad m => m a -> ContT r m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> ContT r m a) -> (ST s a -> m a) -> ST s a -> ContT r m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance MonadST m => MonadST (ExceptT e m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> ExceptT e m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> ExceptT e m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> ExceptT e m a) -> b forall s. (forall a. ST s a -> ExceptT e m a) -> b f (m a -> ExceptT e m a forall (m :: * -> *) a. Monad m => m a -> ExceptT e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> ExceptT e m a) -> (ST s a -> m a) -> ST s a -> ExceptT e m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance (Monoid w, MonadST m) => MonadST (Lazy.RWST r w s m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> RWST r w s m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> RWST r w s m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> RWST r w s m a) -> b forall s. (forall a. ST s a -> RWST r w s m a) -> b f (m a -> RWST r w s m a forall (m :: * -> *) a. Monad m => m a -> RWST r w s m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> RWST r w s m a) -> (ST s a -> m a) -> ST s a -> RWST r w s m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance (Monoid w, MonadST m) => MonadST (Strict.RWST r w s m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> RWST r w s m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> RWST r w s m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> RWST r w s m a) -> b forall s. (forall a. ST s a -> RWST r w s m a) -> b f (m a -> RWST r w s m a forall (m :: * -> *) a. Monad m => m a -> RWST r w s m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> RWST r w s m a) -> (ST s a -> m a) -> ST s a -> RWST r w s m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance MonadST m => MonadST (Lazy.StateT s m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> StateT s m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> StateT s m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> StateT s m a) -> b forall s. (forall a. ST s a -> StateT s m a) -> b f (m a -> StateT s m a forall (m :: * -> *) a. Monad m => m a -> StateT s m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> StateT s m a) -> (ST s a -> m a) -> ST s a -> StateT s m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance MonadST m => MonadST (Strict.StateT s m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> StateT s m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> StateT s m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> StateT s m a) -> b forall s. (forall a. ST s a -> StateT s m a) -> b f (m a -> StateT s m a forall (m :: * -> *) a. Monad m => m a -> StateT s m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> StateT s m a) -> (ST s a -> m a) -> ST s a -> StateT s m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance (Monoid w, MonadST m) => MonadST (Lazy.WriterT w m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> WriterT w m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> WriterT w m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> WriterT w m a) -> b forall s. (forall a. ST s a -> WriterT w m a) -> b f (m a -> WriterT w m a forall (m :: * -> *) a. Monad m => m a -> WriterT w m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> WriterT w m a) -> (ST s a -> m a) -> ST s a -> WriterT w m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g) instance (Monoid w, MonadST m) => MonadST (Strict.WriterT w m) where withLiftST :: forall b. (forall s. (forall a. ST s a -> WriterT w m a) -> b) -> b withLiftST forall s. (forall a. ST s a -> WriterT w m a) -> b f = (forall s. (forall a. ST s a -> m a) -> b) -> b forall b. (forall s. (forall a. ST s a -> m a) -> b) -> b forall (m :: * -> *) b. MonadST m => (forall s. (forall a. ST s a -> m a) -> b) -> b withLiftST ((forall s. (forall a. ST s a -> m a) -> b) -> b) -> (forall s. (forall a. ST s a -> m a) -> b) -> b forall a b. (a -> b) -> a -> b $ \forall a. ST s a -> m a g -> (forall a. ST s a -> WriterT w m a) -> b forall s. (forall a. ST s a -> WriterT w m a) -> b f (m a -> WriterT w m a forall (m :: * -> *) a. Monad m => m a -> WriterT w m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> WriterT w m a) -> (ST s a -> m a) -> ST s a -> WriterT w m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ST s a -> m a forall a. ST s a -> m a g)