{-# LANGUAGE UndecidableInstances #-} module Blucontrol.Monad.Control.Print ( ControlPrintT , runControlPrintT ) where import Control.Monad.Base import Control.Monad.Trans import Control.Monad.Trans.Control import Control.Monad.Trans.Control.Default import Blucontrol.Monad.Control newtype ControlPrintT m a = ControlPrintT { forall (m :: * -> *) a. ControlPrintT m a -> m a unControlPrintT :: m a } deriving (Functor (ControlPrintT m) Functor (ControlPrintT m) -> (forall a. a -> ControlPrintT m a) -> (forall a b. ControlPrintT m (a -> b) -> ControlPrintT m a -> ControlPrintT m b) -> (forall a b c. (a -> b -> c) -> ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m c) -> (forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b) -> (forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m a) -> Applicative (ControlPrintT m) forall a. a -> ControlPrintT m a forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m a forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b forall a b. ControlPrintT m (a -> b) -> ControlPrintT m a -> ControlPrintT m b forall a b c. (a -> b -> c) -> ControlPrintT m a -> ControlPrintT m b -> ControlPrintT 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 (ControlPrintT m) forall (m :: * -> *) a. Applicative m => a -> ControlPrintT m a forall (m :: * -> *) a b. Applicative m => ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m a forall (m :: * -> *) a b. Applicative m => ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b forall (m :: * -> *) a b. Applicative m => ControlPrintT m (a -> b) -> ControlPrintT m a -> ControlPrintT m b forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m c $cpure :: forall (m :: * -> *) a. Applicative m => a -> ControlPrintT m a pure :: forall a. a -> ControlPrintT m a $c<*> :: forall (m :: * -> *) a b. Applicative m => ControlPrintT m (a -> b) -> ControlPrintT m a -> ControlPrintT m b <*> :: forall a b. ControlPrintT m (a -> b) -> ControlPrintT m a -> ControlPrintT m b $cliftA2 :: forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m c liftA2 :: forall a b c. (a -> b -> c) -> ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m c $c*> :: forall (m :: * -> *) a b. Applicative m => ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b *> :: forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b $c<* :: forall (m :: * -> *) a b. Applicative m => ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m a <* :: forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m a Applicative, (forall a b. (a -> b) -> ControlPrintT m a -> ControlPrintT m b) -> (forall a b. a -> ControlPrintT m b -> ControlPrintT m a) -> Functor (ControlPrintT m) forall a b. a -> ControlPrintT m b -> ControlPrintT m a forall a b. (a -> b) -> ControlPrintT m a -> ControlPrintT m b forall (m :: * -> *) a b. Functor m => a -> ControlPrintT m b -> ControlPrintT m a forall (m :: * -> *) a b. Functor m => (a -> b) -> ControlPrintT m a -> ControlPrintT m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f $cfmap :: forall (m :: * -> *) a b. Functor m => (a -> b) -> ControlPrintT m a -> ControlPrintT m b fmap :: forall a b. (a -> b) -> ControlPrintT m a -> ControlPrintT m b $c<$ :: forall (m :: * -> *) a b. Functor m => a -> ControlPrintT m b -> ControlPrintT m a <$ :: forall a b. a -> ControlPrintT m b -> ControlPrintT m a Functor, Applicative (ControlPrintT m) Applicative (ControlPrintT m) -> (forall a b. ControlPrintT m a -> (a -> ControlPrintT m b) -> ControlPrintT m b) -> (forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b) -> (forall a. a -> ControlPrintT m a) -> Monad (ControlPrintT m) forall a. a -> ControlPrintT m a forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b forall a b. ControlPrintT m a -> (a -> ControlPrintT m b) -> ControlPrintT m b forall {m :: * -> *}. Monad m => Applicative (ControlPrintT m) forall (m :: * -> *) a. Monad m => a -> ControlPrintT m a forall (m :: * -> *) a b. Monad m => ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b forall (m :: * -> *) a b. Monad m => ControlPrintT m a -> (a -> ControlPrintT m b) -> ControlPrintT 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 $c>>= :: forall (m :: * -> *) a b. Monad m => ControlPrintT m a -> (a -> ControlPrintT m b) -> ControlPrintT m b >>= :: forall a b. ControlPrintT m a -> (a -> ControlPrintT m b) -> ControlPrintT m b $c>> :: forall (m :: * -> *) a b. Monad m => ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b >> :: forall a b. ControlPrintT m a -> ControlPrintT m b -> ControlPrintT m b $creturn :: forall (m :: * -> *) a. Monad m => a -> ControlPrintT m a return :: forall a. a -> ControlPrintT m a Monad, MonadBase b, MonadBaseControl b) deriving ((forall (m :: * -> *) a. Monad m => m a -> ControlPrintT m a) -> MonadTrans ControlPrintT forall (m :: * -> *) a. Monad m => m a -> ControlPrintT m a forall (t :: (* -> *) -> * -> *). (forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t $clift :: forall (m :: * -> *) a. Monad m => m a -> ControlPrintT m a lift :: forall (m :: * -> *) a. Monad m => m a -> ControlPrintT m a MonadTrans, MonadTrans ControlPrintT MonadTrans ControlPrintT -> (forall (m :: * -> *) a. Monad m => (Run ControlPrintT -> m a) -> ControlPrintT m a) -> (forall (m :: * -> *) a. Monad m => m (StT ControlPrintT a) -> ControlPrintT m a) -> MonadTransControl ControlPrintT forall (m :: * -> *) a. Monad m => m (StT ControlPrintT a) -> ControlPrintT m a forall (m :: * -> *) a. Monad m => (Run ControlPrintT -> m a) -> ControlPrintT 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 $cliftWith :: forall (m :: * -> *) a. Monad m => (Run ControlPrintT -> m a) -> ControlPrintT m a liftWith :: forall (m :: * -> *) a. Monad m => (Run ControlPrintT -> m a) -> ControlPrintT m a $crestoreT :: forall (m :: * -> *) a. Monad m => m (StT ControlPrintT a) -> ControlPrintT m a restoreT :: forall (m :: * -> *) a. Monad m => m (StT ControlPrintT a) -> ControlPrintT m a MonadTransControl) via Stack0T instance MonadBaseControl IO m => MonadControl (ControlPrintT m) where type ControlConstraint (ControlPrintT m) a = Show a doInbetween :: forall a. ControlConstraint (ControlPrintT m) a => a -> ControlPrintT m () doInbetween a a = IO () -> ControlPrintT m () forall α. IO α -> ControlPrintT m α forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α liftBase (IO () -> ControlPrintT m ()) -> IO () -> ControlPrintT m () forall a b. (a -> b) -> a -> b $ a -> IO () forall a. Show a => a -> IO () print a a runControlPrintT :: ControlPrintT m a -> m a runControlPrintT :: forall (m :: * -> *) a. ControlPrintT m a -> m a runControlPrintT = ControlPrintT m a -> m a forall (m :: * -> *) a. ControlPrintT m a -> m a unControlPrintT