{-# LANGUAGE QuantifiedConstraints, UndecidableInstances #-} module Control.Monad.Trans.Deriving ( Stack0T (..) , Stack1T (..) , Stack2T (..) , Stack3T (..) ) where import Control.Monad.Base import Control.Monad.Trans import Control.Monad.Trans.Control import Data.Kind newtype Stack0T (m :: Type -> Type) (a :: Type) = Stack0T { Stack0T m a -> m a unStack0T :: m a } deriving (Functor (Stack0T m) a -> Stack0T m a Functor (Stack0T m) -> (forall a. a -> Stack0T m a) -> (forall a b. Stack0T m (a -> b) -> Stack0T m a -> Stack0T m b) -> (forall a b c. (a -> b -> c) -> Stack0T m a -> Stack0T m b -> Stack0T m c) -> (forall a b. Stack0T m a -> Stack0T m b -> Stack0T m b) -> (forall a b. Stack0T m a -> Stack0T m b -> Stack0T m a) -> Applicative (Stack0T m) Stack0T m a -> Stack0T m b -> Stack0T m b Stack0T m a -> Stack0T m b -> Stack0T m a Stack0T m (a -> b) -> Stack0T m a -> Stack0T m b (a -> b -> c) -> Stack0T m a -> Stack0T m b -> Stack0T m c forall a. a -> Stack0T m a forall a b. Stack0T m a -> Stack0T m b -> Stack0T m a forall a b. Stack0T m a -> Stack0T m b -> Stack0T m b forall a b. Stack0T m (a -> b) -> Stack0T m a -> Stack0T m b forall a b c. (a -> b -> c) -> Stack0T m a -> Stack0T m b -> Stack0T m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall (m :: * -> *). Applicative m => Functor (Stack0T m) forall (m :: * -> *) a. Applicative m => a -> Stack0T m a forall (m :: * -> *) a b. Applicative m => Stack0T m a -> Stack0T m b -> Stack0T m a forall (m :: * -> *) a b. Applicative m => Stack0T m a -> Stack0T m b -> Stack0T m b forall (m :: * -> *) a b. Applicative m => Stack0T m (a -> b) -> Stack0T m a -> Stack0T m b forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> Stack0T m a -> Stack0T m b -> Stack0T m c <* :: Stack0T m a -> Stack0T m b -> Stack0T m a $c<* :: forall (m :: * -> *) a b. Applicative m => Stack0T m a -> Stack0T m b -> Stack0T m a *> :: Stack0T m a -> Stack0T m b -> Stack0T m b $c*> :: forall (m :: * -> *) a b. Applicative m => Stack0T m a -> Stack0T m b -> Stack0T m b liftA2 :: (a -> b -> c) -> Stack0T m a -> Stack0T m b -> Stack0T m c $cliftA2 :: forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> Stack0T m a -> Stack0T m b -> Stack0T m c <*> :: Stack0T m (a -> b) -> Stack0T m a -> Stack0T m b $c<*> :: forall (m :: * -> *) a b. Applicative m => Stack0T m (a -> b) -> Stack0T m a -> Stack0T m b pure :: a -> Stack0T m a $cpure :: forall (m :: * -> *) a. Applicative m => a -> Stack0T m a $cp1Applicative :: forall (m :: * -> *). Applicative m => Functor (Stack0T m) Applicative, a -> Stack0T m b -> Stack0T m a (a -> b) -> Stack0T m a -> Stack0T m b (forall a b. (a -> b) -> Stack0T m a -> Stack0T m b) -> (forall a b. a -> Stack0T m b -> Stack0T m a) -> Functor (Stack0T m) forall a b. a -> Stack0T m b -> Stack0T m a forall a b. (a -> b) -> Stack0T m a -> Stack0T m b forall (m :: * -> *) a b. Functor m => a -> Stack0T m b -> Stack0T m a forall (m :: * -> *) a b. Functor m => (a -> b) -> Stack0T m a -> Stack0T m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> Stack0T m b -> Stack0T m a $c<$ :: forall (m :: * -> *) a b. Functor m => a -> Stack0T m b -> Stack0T m a fmap :: (a -> b) -> Stack0T m a -> Stack0T m b $cfmap :: forall (m :: * -> *) a b. Functor m => (a -> b) -> Stack0T m a -> Stack0T m b Functor, Applicative (Stack0T m) a -> Stack0T m a Applicative (Stack0T m) -> (forall a b. Stack0T m a -> (a -> Stack0T m b) -> Stack0T m b) -> (forall a b. Stack0T m a -> Stack0T m b -> Stack0T m b) -> (forall a. a -> Stack0T m a) -> Monad (Stack0T m) Stack0T m a -> (a -> Stack0T m b) -> Stack0T m b Stack0T m a -> Stack0T m b -> Stack0T m b forall a. a -> Stack0T m a forall a b. Stack0T m a -> Stack0T m b -> Stack0T m b forall a b. Stack0T m a -> (a -> Stack0T m b) -> Stack0T m b forall (m :: * -> *). Monad m => Applicative (Stack0T m) forall (m :: * -> *) a. Monad m => a -> Stack0T m a forall (m :: * -> *) a b. Monad m => Stack0T m a -> Stack0T m b -> Stack0T m b forall (m :: * -> *) a b. Monad m => Stack0T m a -> (a -> Stack0T m b) -> Stack0T m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: a -> Stack0T m a $creturn :: forall (m :: * -> *) a. Monad m => a -> Stack0T m a >> :: Stack0T m a -> Stack0T m b -> Stack0T m b $c>> :: forall (m :: * -> *) a b. Monad m => Stack0T m a -> Stack0T m b -> Stack0T m b >>= :: Stack0T m a -> (a -> Stack0T m b) -> Stack0T m b $c>>= :: forall (m :: * -> *) a b. Monad m => Stack0T m a -> (a -> Stack0T m b) -> Stack0T m b $cp1Monad :: forall (m :: * -> *). Monad m => Applicative (Stack0T m) Monad, MonadBase b, MonadBaseControl b) instance MonadTrans Stack0T where lift :: m a -> Stack0T m a lift = m a -> Stack0T m a forall (m :: * -> *) a. m a -> Stack0T m a Stack0T instance MonadTransControl Stack0T where type StT Stack0T a = a liftWith :: (Run Stack0T -> m a) -> Stack0T m a liftWith Run Stack0T -> m a f = m a -> Stack0T m a forall (m :: * -> *) a. m a -> Stack0T m a Stack0T (m a -> Stack0T m a) -> m a -> Stack0T m a forall a b. (a -> b) -> a -> b $ Run Stack0T -> m a f Run Stack0T forall (m :: * -> *) a. Stack0T m a -> m a unStack0T restoreT :: m (StT Stack0T a) -> Stack0T m a restoreT = m (StT Stack0T a) -> Stack0T m a forall (m :: * -> *) a. m a -> Stack0T m a Stack0T newtype Stack1T (t :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) (a :: Type) = Stack1T { Stack1T t m a -> t m a unStack1T :: t m a } deriving (Functor (Stack1T t m) a -> Stack1T t m a Functor (Stack1T t m) -> (forall a. a -> Stack1T t m a) -> (forall a b. Stack1T t m (a -> b) -> Stack1T t m a -> Stack1T t m b) -> (forall a b c. (a -> b -> c) -> Stack1T t m a -> Stack1T t m b -> Stack1T t m c) -> (forall a b. Stack1T t m a -> Stack1T t m b -> Stack1T t m b) -> (forall a b. Stack1T t m a -> Stack1T t m b -> Stack1T t m a) -> Applicative (Stack1T t m) Stack1T t m a -> Stack1T t m b -> Stack1T t m b Stack1T t m a -> Stack1T t m b -> Stack1T t m a Stack1T t m (a -> b) -> Stack1T t m a -> Stack1T t m b (a -> b -> c) -> Stack1T t m a -> Stack1T t m b -> Stack1T t m c forall a. a -> Stack1T t m a forall a b. Stack1T t m a -> Stack1T t m b -> Stack1T t m a forall a b. Stack1T t m a -> Stack1T t m b -> Stack1T t m b forall a b. Stack1T t m (a -> b) -> Stack1T t m a -> Stack1T t m b forall a b c. (a -> b -> c) -> Stack1T t m a -> Stack1T t m b -> Stack1T t m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall (t :: (* -> *) -> * -> *) (m :: * -> *). Applicative (t m) => Functor (Stack1T t m) forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. Applicative (t m) => a -> Stack1T t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t m) => Stack1T t m a -> Stack1T t m b -> Stack1T t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t m) => Stack1T t m a -> Stack1T t m b -> Stack1T t m b forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t m) => Stack1T t m (a -> b) -> Stack1T t m a -> Stack1T t m b forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b c. Applicative (t m) => (a -> b -> c) -> Stack1T t m a -> Stack1T t m b -> Stack1T t m c <* :: Stack1T t m a -> Stack1T t m b -> Stack1T t m a $c<* :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t m) => Stack1T t m a -> Stack1T t m b -> Stack1T t m a *> :: Stack1T t m a -> Stack1T t m b -> Stack1T t m b $c*> :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t m) => Stack1T t m a -> Stack1T t m b -> Stack1T t m b liftA2 :: (a -> b -> c) -> Stack1T t m a -> Stack1T t m b -> Stack1T t m c $cliftA2 :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b c. Applicative (t m) => (a -> b -> c) -> Stack1T t m a -> Stack1T t m b -> Stack1T t m c <*> :: Stack1T t m (a -> b) -> Stack1T t m a -> Stack1T t m b $c<*> :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t m) => Stack1T t m (a -> b) -> Stack1T t m a -> Stack1T t m b pure :: a -> Stack1T t m a $cpure :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. Applicative (t m) => a -> Stack1T t m a $cp1Applicative :: forall (t :: (* -> *) -> * -> *) (m :: * -> *). Applicative (t m) => Functor (Stack1T t m) Applicative, a -> Stack1T t m b -> Stack1T t m a (a -> b) -> Stack1T t m a -> Stack1T t m b (forall a b. (a -> b) -> Stack1T t m a -> Stack1T t m b) -> (forall a b. a -> Stack1T t m b -> Stack1T t m a) -> Functor (Stack1T t m) forall a b. a -> Stack1T t m b -> Stack1T t m a forall a b. (a -> b) -> Stack1T t m a -> Stack1T t m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t m) => a -> Stack1T t m b -> Stack1T t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t m) => (a -> b) -> Stack1T t m a -> Stack1T t m b <$ :: a -> Stack1T t m b -> Stack1T t m a $c<$ :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t m) => a -> Stack1T t m b -> Stack1T t m a fmap :: (a -> b) -> Stack1T t m a -> Stack1T t m b $cfmap :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t m) => (a -> b) -> Stack1T t m a -> Stack1T t m b Functor, Applicative (Stack1T t m) a -> Stack1T t m a Applicative (Stack1T t m) -> (forall a b. Stack1T t m a -> (a -> Stack1T t m b) -> Stack1T t m b) -> (forall a b. Stack1T t m a -> Stack1T t m b -> Stack1T t m b) -> (forall a. a -> Stack1T t m a) -> Monad (Stack1T t m) Stack1T t m a -> (a -> Stack1T t m b) -> Stack1T t m b Stack1T t m a -> Stack1T t m b -> Stack1T t m b forall a. a -> Stack1T t m a forall a b. Stack1T t m a -> Stack1T t m b -> Stack1T t m b forall a b. Stack1T t m a -> (a -> Stack1T t m b) -> Stack1T t m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m forall (t :: (* -> *) -> * -> *) (m :: * -> *). Monad (t m) => Applicative (Stack1T t m) forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. Monad (t m) => a -> Stack1T t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t m) => Stack1T t m a -> Stack1T t m b -> Stack1T t m b forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t m) => Stack1T t m a -> (a -> Stack1T t m b) -> Stack1T t m b return :: a -> Stack1T t m a $creturn :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. Monad (t m) => a -> Stack1T t m a >> :: Stack1T t m a -> Stack1T t m b -> Stack1T t m b $c>> :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t m) => Stack1T t m a -> Stack1T t m b -> Stack1T t m b >>= :: Stack1T t m a -> (a -> Stack1T t m b) -> Stack1T t m b $c>>= :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t m) => Stack1T t m a -> (a -> Stack1T t m b) -> Stack1T t m b $cp1Monad :: forall (t :: (* -> *) -> * -> *) (m :: * -> *). Monad (t m) => Applicative (Stack1T t m) Monad, MonadBase b, MonadBaseControl b, m a -> Stack1T t m a (forall (m :: * -> *) a. Monad m => m a -> Stack1T t m a) -> MonadTrans (Stack1T t) forall (m :: * -> *) a. Monad m => m a -> Stack1T t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> Stack1T t m a forall (t :: (* -> *) -> * -> *). (forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t lift :: m a -> Stack1T t m a $clift :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> Stack1T t m a MonadTrans, MonadTrans (Stack1T t) m (StT (Stack1T t) a) -> Stack1T t m a MonadTrans (Stack1T t) -> (forall (m :: * -> *) a. Monad m => (Run (Stack1T t) -> m a) -> Stack1T t m a) -> (forall (m :: * -> *) a. Monad m => m (StT (Stack1T t) a) -> Stack1T t m a) -> MonadTransControl (Stack1T t) (Run (Stack1T t) -> m a) -> Stack1T t m a forall (m :: * -> *) a. Monad m => m (StT (Stack1T t) a) -> Stack1T t m a forall (m :: * -> *) a. Monad m => (Run (Stack1T t) -> m a) -> Stack1T t m a forall (t :: (* -> *) -> * -> *). MonadTrans t -> (forall (m :: * -> *) a. Monad m => (Run t -> m a) -> t m a) -> (forall (m :: * -> *) a. Monad m => m (StT t a) -> t m a) -> MonadTransControl t forall (t :: (* -> *) -> * -> *). MonadTransControl t => MonadTrans (Stack1T t) forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => m (StT (Stack1T t) a) -> Stack1T t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => (Run (Stack1T t) -> m a) -> Stack1T t m a restoreT :: m (StT (Stack1T t) a) -> Stack1T t m a $crestoreT :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => m (StT (Stack1T t) a) -> Stack1T t m a liftWith :: (Run (Stack1T t) -> m a) -> Stack1T t m a $cliftWith :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => (Run (Stack1T t) -> m a) -> Stack1T t m a $cp1MonadTransControl :: forall (t :: (* -> *) -> * -> *). MonadTransControl t => MonadTrans (Stack1T t) MonadTransControl) newtype Stack2T (t1 :: (Type -> Type) -> Type -> Type) (t2 :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) (a :: Type) = Stack2T { Stack2T t1 t2 m a -> t1 (t2 m) a unStack2T :: t1 (t2 m) a } deriving (Functor (Stack2T t1 t2 m) a -> Stack2T t1 t2 m a Functor (Stack2T t1 t2 m) -> (forall a. a -> Stack2T t1 t2 m a) -> (forall a b. Stack2T t1 t2 m (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b) -> (forall a b c. (a -> b -> c) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m c) -> (forall a b. Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b) -> (forall a b. Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a) -> Applicative (Stack2T t1 t2 m) Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a Stack2T t1 t2 m (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b (a -> b -> c) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m c forall a. a -> Stack2T t1 t2 m a forall a b. Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a forall a b. Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b forall a b. Stack2T t1 t2 m (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b forall a b c. (a -> b -> c) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *). Applicative (t1 (t2 m)) => Functor (Stack2T t1 t2 m) forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. Applicative (t1 (t2 m)) => a -> Stack2T t1 t2 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 m)) => Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 m)) => Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 m)) => Stack2T t1 t2 m (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b c. Applicative (t1 (t2 m)) => (a -> b -> c) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m c <* :: Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a $c<* :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 m)) => Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a *> :: Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b $c*> :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 m)) => Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b liftA2 :: (a -> b -> c) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m c $cliftA2 :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b c. Applicative (t1 (t2 m)) => (a -> b -> c) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m c <*> :: Stack2T t1 t2 m (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b $c<*> :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 m)) => Stack2T t1 t2 m (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b pure :: a -> Stack2T t1 t2 m a $cpure :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. Applicative (t1 (t2 m)) => a -> Stack2T t1 t2 m a $cp1Applicative :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *). Applicative (t1 (t2 m)) => Functor (Stack2T t1 t2 m) Applicative, a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b (forall a b. (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b) -> (forall a b. a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a) -> Functor (Stack2T t1 t2 m) forall a b. a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a forall a b. (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 m)) => a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 m)) => (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b <$ :: a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a $c<$ :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 m)) => a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m a fmap :: (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b $cfmap :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 m)) => (a -> b) -> Stack2T t1 t2 m a -> Stack2T t1 t2 m b Functor, Applicative (Stack2T t1 t2 m) a -> Stack2T t1 t2 m a Applicative (Stack2T t1 t2 m) -> (forall a b. Stack2T t1 t2 m a -> (a -> Stack2T t1 t2 m b) -> Stack2T t1 t2 m b) -> (forall a b. Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b) -> (forall a. a -> Stack2T t1 t2 m a) -> Monad (Stack2T t1 t2 m) Stack2T t1 t2 m a -> (a -> Stack2T t1 t2 m b) -> Stack2T t1 t2 m b Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b forall a. a -> Stack2T t1 t2 m a forall a b. Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b forall a b. Stack2T t1 t2 m a -> (a -> Stack2T t1 t2 m b) -> Stack2T t1 t2 m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *). Monad (t1 (t2 m)) => Applicative (Stack2T t1 t2 m) forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. Monad (t1 (t2 m)) => a -> Stack2T t1 t2 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 m)) => Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 m)) => Stack2T t1 t2 m a -> (a -> Stack2T t1 t2 m b) -> Stack2T t1 t2 m b return :: a -> Stack2T t1 t2 m a $creturn :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. Monad (t1 (t2 m)) => a -> Stack2T t1 t2 m a >> :: Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b $c>> :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 m)) => Stack2T t1 t2 m a -> Stack2T t1 t2 m b -> Stack2T t1 t2 m b >>= :: Stack2T t1 t2 m a -> (a -> Stack2T t1 t2 m b) -> Stack2T t1 t2 m b $c>>= :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 m)) => Stack2T t1 t2 m a -> (a -> Stack2T t1 t2 m b) -> Stack2T t1 t2 m b $cp1Monad :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *). Monad (t1 (t2 m)) => Applicative (Stack2T t1 t2 m) Monad, MonadBase b, MonadBaseControl b) instance (forall m. Monad m => Monad (t2 m), MonadTrans t1, MonadTrans t2) => MonadTrans (Stack2T t1 t2) where lift :: m a -> Stack2T t1 t2 m a lift = t1 (t2 m) a -> Stack2T t1 t2 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. t1 (t2 m) a -> Stack2T t1 t2 m a Stack2T (t1 (t2 m) a -> Stack2T t1 t2 m a) -> (m a -> t1 (t2 m) a) -> m a -> Stack2T t1 t2 m a forall b c a. (b -> c) -> (a -> b) -> a -> c . t2 m a -> t1 (t2 m) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (t2 m a -> t1 (t2 m) a) -> (m a -> t2 m a) -> m a -> t1 (t2 m) a forall b c a. (b -> c) -> (a -> b) -> a -> c . m a -> t2 m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance (forall m. Monad m => Monad (t2 m), MonadTransControl t1, MonadTransControl t2) => MonadTransControl (Stack2T t1 t2) where type StT (Stack2T t1 t2) a = StT t2 (StT t1 a) liftWith :: (Run (Stack2T t1 t2) -> m a) -> Stack2T t1 t2 m a liftWith Run (Stack2T t1 t2) -> m a f = (forall b. t1 (t2 m) b -> Stack2T t1 t2 m b) -> (forall (o :: * -> *) b. Stack2T t1 t2 o b -> t1 (t2 o) b) -> (RunDefault2 (Stack2T t1 t2) t1 t2 -> m a) -> Stack2T t1 t2 m a forall (m :: * -> *) (n' :: (* -> *) -> * -> *) (n :: (* -> *) -> * -> *) (t :: (* -> *) -> * -> *) a. (Monad m, Monad (n' m), MonadTransControl n, MonadTransControl n') => (forall b. n (n' m) b -> t m b) -> (forall (o :: * -> *) b. t o b -> n (n' o) b) -> (RunDefault2 t n n' -> m a) -> t m a defaultLiftWith2 forall b. t1 (t2 m) b -> Stack2T t1 t2 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. t1 (t2 m) a -> Stack2T t1 t2 m a Stack2T forall (o :: * -> *) b. Stack2T t1 t2 o b -> t1 (t2 o) b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. Stack2T t1 t2 m a -> t1 (t2 m) a unStack2T ((RunDefault2 (Stack2T t1 t2) t1 t2 -> m a) -> Stack2T t1 t2 m a) -> (RunDefault2 (Stack2T t1 t2) t1 t2 -> m a) -> Stack2T t1 t2 m a forall a b. (a -> b) -> a -> b $ \RunDefault2 (Stack2T t1 t2) t1 t2 x -> Run (Stack2T t1 t2) -> m a f RunDefault2 (Stack2T t1 t2) t1 t2 Run (Stack2T t1 t2) x restoreT :: m (StT (Stack2T t1 t2) a) -> Stack2T t1 t2 m a restoreT = (t1 (t2 m) a -> Stack2T t1 t2 m a) -> m (StT t2 (StT t1 a)) -> Stack2T t1 t2 m a forall (m :: * -> *) (n' :: (* -> *) -> * -> *) (n :: (* -> *) -> * -> *) a (t :: (* -> *) -> * -> *). (Monad m, Monad (n' m), MonadTransControl n, MonadTransControl n') => (n (n' m) a -> t m a) -> m (StT n' (StT n a)) -> t m a defaultRestoreT2 t1 (t2 m) a -> Stack2T t1 t2 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (m :: * -> *) a. t1 (t2 m) a -> Stack2T t1 t2 m a Stack2T newtype Stack3T (t1 :: (Type -> Type) -> Type -> Type) (t2 :: (Type -> Type) -> Type -> Type) (t3 :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) (a :: Type) = Stack3T { Stack3T t1 t2 t3 m a -> t1 (t2 (t3 m)) a unStack3T :: t1 (t2 (t3 m)) a } deriving (Functor (Stack3T t1 t2 t3 m) a -> Stack3T t1 t2 t3 m a Functor (Stack3T t1 t2 t3 m) -> (forall a. a -> Stack3T t1 t2 t3 m a) -> (forall a b. Stack3T t1 t2 t3 m (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b) -> (forall a b c. (a -> b -> c) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m c) -> (forall a b. Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b) -> (forall a b. Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a) -> Applicative (Stack3T t1 t2 t3 m) Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a Stack3T t1 t2 t3 m (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b (a -> b -> c) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m c forall a. a -> Stack3T t1 t2 t3 m a forall a b. Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a forall a b. Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b forall a b. Stack3T t1 t2 t3 m (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b forall a b c. (a -> b -> c) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *). Applicative (t1 (t2 (t3 m))) => Functor (Stack3T t1 t2 t3 m) forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. Applicative (t1 (t2 (t3 m))) => a -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b c. Applicative (t1 (t2 (t3 m))) => (a -> b -> c) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m c <* :: Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a $c<* :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a *> :: Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b $c*> :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b liftA2 :: (a -> b -> c) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m c $cliftA2 :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b c. Applicative (t1 (t2 (t3 m))) => (a -> b -> c) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m c <*> :: Stack3T t1 t2 t3 m (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b $c<*> :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Applicative (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b pure :: a -> Stack3T t1 t2 t3 m a $cpure :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. Applicative (t1 (t2 (t3 m))) => a -> Stack3T t1 t2 t3 m a $cp1Applicative :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *). Applicative (t1 (t2 (t3 m))) => Functor (Stack3T t1 t2 t3 m) Applicative, a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b (forall a b. (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b) -> (forall a b. a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a) -> Functor (Stack3T t1 t2 t3 m) forall a b. a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a forall a b. (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 (t3 m))) => a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 (t3 m))) => (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b <$ :: a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a $c<$ :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 (t3 m))) => a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m a fmap :: (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b $cfmap :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Functor (t1 (t2 (t3 m))) => (a -> b) -> Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b Functor, Applicative (Stack3T t1 t2 t3 m) a -> Stack3T t1 t2 t3 m a Applicative (Stack3T t1 t2 t3 m) -> (forall a b. Stack3T t1 t2 t3 m a -> (a -> Stack3T t1 t2 t3 m b) -> Stack3T t1 t2 t3 m b) -> (forall a b. Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b) -> (forall a. a -> Stack3T t1 t2 t3 m a) -> Monad (Stack3T t1 t2 t3 m) Stack3T t1 t2 t3 m a -> (a -> Stack3T t1 t2 t3 m b) -> Stack3T t1 t2 t3 m b Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b forall a. a -> Stack3T t1 t2 t3 m a forall a b. Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b forall a b. Stack3T t1 t2 t3 m a -> (a -> Stack3T t1 t2 t3 m b) -> Stack3T t1 t2 t3 m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *). Monad (t1 (t2 (t3 m))) => Applicative (Stack3T t1 t2 t3 m) forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. Monad (t1 (t2 (t3 m))) => a -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> (a -> Stack3T t1 t2 t3 m b) -> Stack3T t1 t2 t3 m b return :: a -> Stack3T t1 t2 t3 m a $creturn :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. Monad (t1 (t2 (t3 m))) => a -> Stack3T t1 t2 t3 m a >> :: Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b $c>> :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> Stack3T t1 t2 t3 m b -> Stack3T t1 t2 t3 m b >>= :: Stack3T t1 t2 t3 m a -> (a -> Stack3T t1 t2 t3 m b) -> Stack3T t1 t2 t3 m b $c>>= :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a b. Monad (t1 (t2 (t3 m))) => Stack3T t1 t2 t3 m a -> (a -> Stack3T t1 t2 t3 m b) -> Stack3T t1 t2 t3 m b $cp1Monad :: forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *). Monad (t1 (t2 (t3 m))) => Applicative (Stack3T t1 t2 t3 m) Monad, MonadBase b, MonadBaseControl b) instance (forall m. Monad m => Monad (t3 m), forall m. Monad m => Monad (t2 (t3 m)), MonadTrans t1, MonadTrans t2, MonadTrans t3) => MonadTrans (Stack3T t1 t2 t3) where lift :: m a -> Stack3T t1 t2 t3 m a lift = t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a Stack3T (t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a) -> (m a -> t1 (t2 (t3 m)) a) -> m a -> Stack3T t1 t2 t3 m a forall b c a. (b -> c) -> (a -> b) -> a -> c . t2 (t3 m) a -> t1 (t2 (t3 m)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (t2 (t3 m) a -> t1 (t2 (t3 m)) a) -> (m a -> t2 (t3 m) a) -> m a -> t1 (t2 (t3 m)) a forall b c a. (b -> c) -> (a -> b) -> a -> c . t3 m a -> t2 (t3 m) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (t3 m a -> t2 (t3 m) a) -> (m a -> t3 m a) -> m a -> t2 (t3 m) a forall b c a. (b -> c) -> (a -> b) -> a -> c . m a -> t3 m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift instance (forall m. Monad m => Monad (t3 m), forall m. Monad m => Monad (t2 (t3 m)), MonadTransControl t1, MonadTransControl t2, MonadTransControl t3) => MonadTransControl (Stack3T t1 t2 t3) where type StT (Stack3T t1 t2 t3) a = StT t3 (StT t2 (StT t1 a)) liftWith :: (Run (Stack3T t1 t2 t3) -> m a) -> Stack3T t1 t2 t3 m a liftWith Run (Stack3T t1 t2 t3) -> m a f = t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a Stack3T (t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a) -> t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a forall a b. (a -> b) -> a -> b $ (Run t1 -> t2 (t3 m) a) -> t1 (t2 (t3 m)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => (Run t -> m a) -> t m a liftWith ((Run t1 -> t2 (t3 m) a) -> t1 (t2 (t3 m)) a) -> (Run t1 -> t2 (t3 m) a) -> t1 (t2 (t3 m)) a forall a b. (a -> b) -> a -> b $ \Run t1 run -> (Run t2 -> t3 m a) -> t2 (t3 m) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => (Run t -> m a) -> t m a liftWith ((Run t2 -> t3 m a) -> t2 (t3 m) a) -> (Run t2 -> t3 m a) -> t2 (t3 m) a forall a b. (a -> b) -> a -> b $ \Run t2 run' -> (Run t3 -> m a) -> t3 m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => (Run t -> m a) -> t m a liftWith ((Run t3 -> m a) -> t3 m a) -> (Run t3 -> m a) -> t3 m a forall a b. (a -> b) -> a -> b $ \ Run t3 run'' -> Run (Stack3T t1 t2 t3) -> m a f (Run (Stack3T t1 t2 t3) -> m a) -> Run (Stack3T t1 t2 t3) -> m a forall a b. (a -> b) -> a -> b $ t3 n (StT t2 (StT t1 b)) -> n (StT t3 (StT t2 (StT t1 b))) Run t3 run'' (t3 n (StT t2 (StT t1 b)) -> n (StT t3 (StT t2 (StT t1 b)))) -> (Stack3T t1 t2 t3 n b -> t3 n (StT t2 (StT t1 b))) -> Stack3T t1 t2 t3 n b -> n (StT t3 (StT t2 (StT t1 b))) forall b c a. (b -> c) -> (a -> b) -> a -> c . t2 (t3 n) (StT t1 b) -> t3 n (StT t2 (StT t1 b)) Run t2 run' (t2 (t3 n) (StT t1 b) -> t3 n (StT t2 (StT t1 b))) -> (Stack3T t1 t2 t3 n b -> t2 (t3 n) (StT t1 b)) -> Stack3T t1 t2 t3 n b -> t3 n (StT t2 (StT t1 b)) forall b c a. (b -> c) -> (a -> b) -> a -> c . t1 (t2 (t3 n)) b -> t2 (t3 n) (StT t1 b) Run t1 run (t1 (t2 (t3 n)) b -> t2 (t3 n) (StT t1 b)) -> (Stack3T t1 t2 t3 n b -> t1 (t2 (t3 n)) b) -> Stack3T t1 t2 t3 n b -> t2 (t3 n) (StT t1 b) forall b c a. (b -> c) -> (a -> b) -> a -> c . Stack3T t1 t2 t3 n b -> t1 (t2 (t3 n)) b forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. Stack3T t1 t2 t3 m a -> t1 (t2 (t3 m)) a unStack3T restoreT :: m (StT (Stack3T t1 t2 t3) a) -> Stack3T t1 t2 t3 m a restoreT = t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a forall (t1 :: (* -> *) -> * -> *) (t2 :: (* -> *) -> * -> *) (t3 :: (* -> *) -> * -> *) (m :: * -> *) a. t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a Stack3T (t1 (t2 (t3 m)) a -> Stack3T t1 t2 t3 m a) -> (m (StT t3 (StT t2 (StT t1 a))) -> t1 (t2 (t3 m)) a) -> m (StT t3 (StT t2 (StT t1 a))) -> Stack3T t1 t2 t3 m a forall b c a. (b -> c) -> (a -> b) -> a -> c . t2 (t3 m) (StT t1 a) -> t1 (t2 (t3 m)) a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => m (StT t a) -> t m a restoreT (t2 (t3 m) (StT t1 a) -> t1 (t2 (t3 m)) a) -> (m (StT t3 (StT t2 (StT t1 a))) -> t2 (t3 m) (StT t1 a)) -> m (StT t3 (StT t2 (StT t1 a))) -> t1 (t2 (t3 m)) a forall b c a. (b -> c) -> (a -> b) -> a -> c . t3 m (StT t2 (StT t1 a)) -> t2 (t3 m) (StT t1 a) forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => m (StT t a) -> t m a restoreT (t3 m (StT t2 (StT t1 a)) -> t2 (t3 m) (StT t1 a)) -> (m (StT t3 (StT t2 (StT t1 a))) -> t3 m (StT t2 (StT t1 a))) -> m (StT t3 (StT t2 (StT t1 a))) -> t2 (t3 m) (StT t1 a) forall b c a. (b -> c) -> (a -> b) -> a -> c . m (StT t3 (StT t2 (StT t1 a))) -> t3 m (StT t2 (StT t1 a)) forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => m (StT t a) -> t m a restoreT