bludigon-0.1.1.0: src/Bludigon/Control/Print.hs
{-# LANGUAGE UndecidableInstances #-}
module Bludigon.Control.Print (
ControlPrintT
, runControlPrintT
) where
import Control.Monad.Base
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Bludigon.Control
newtype ControlPrintT m a = ControlPrintT { unControlPrintT :: m a }
deriving (Applicative, Functor, Monad, MonadBase b, MonadBaseControl b)
instance MonadTrans ControlPrintT where
lift = ControlPrintT
instance MonadTransControl ControlPrintT where
type StT ControlPrintT a = a
liftWith inner = ControlPrintT $ inner unControlPrintT
restoreT = ControlPrintT
instance MonadBaseControl IO m => MonadControl (ControlPrintT m) where
type ControlConstraint (ControlPrintT m) a = Show a
doInbetween a = liftBase $ print a
runControlPrintT :: ControlPrintT m a -> m a
runControlPrintT = unControlPrintT