blucontrol-0.4.0.0: src/Blucontrol/Recolor/Print.hs
{-# LANGUAGE UndecidableInstances #-}
module Blucontrol.Recolor.Print (
RecolorPrintT
, runRecolorPrintT
) where
import Control.Monad.Base
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Blucontrol.Recolor
newtype RecolorPrintT c m a = RecolorPrintT { unRecolorPrintT :: m a }
deriving (Applicative, Functor, Monad, MonadBase b, MonadBaseControl b)
instance MonadTrans (RecolorPrintT c) where
lift = RecolorPrintT
instance MonadTransControl (RecolorPrintT c) where
type StT (RecolorPrintT c) a = a
liftWith inner = RecolorPrintT $ inner unRecolorPrintT
restoreT = RecolorPrintT
instance (MonadBaseControl IO m, Show c) => MonadRecolor (RecolorPrintT c m) where
type RecolorValue (RecolorPrintT c m) = c
recolor = liftBase . print
runRecolorPrintT :: RecolorPrintT c m a -> m a
runRecolorPrintT = unRecolorPrintT