bludigon-0.1.0.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 MonadControl m => MonadControl (ControlPrintT m) where
type ControlConstraint (ControlPrintT m) a = (ControlConstraint m a, Show a)
doInbetween a = do liftBase $ print a
lift $ doInbetween a
runControlPrintT :: ControlPrintT m a -> m a
runControlPrintT = unControlPrintT