packages feed

blucontrol-0.7.0.0: src/Blucontrol/Monad/ApplyValue/Print.hs

module Blucontrol.Monad.ApplyValue.Print (
  ApplyValuePrintT
, runApplyValuePrintT
) where

import Control.Monad.Base
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Control.Monad.Trans.Control.Default

import Blucontrol.Monad.ApplyValue

newtype ApplyValuePrintT c m a = ApplyValuePrintT { unApplyValuePrintT :: m a }
  deriving (Applicative, Functor, Monad, MonadBase b, MonadBaseControl b)
  deriving (MonadTrans, MonadTransControl) via Stack0T

instance (MonadBaseControl IO m, Show c) => MonadApplyValue (ApplyValuePrintT c m) where
  type ApplicableValue (ApplyValuePrintT c m) = c
  applyValue = liftBase . print

runApplyValuePrintT :: ApplyValuePrintT c m a -> m a
runApplyValuePrintT = unApplyValuePrintT