packages feed

blucontrol-0.7.0.0: src/Blucontrol/Monad/PrepareValue/Const.hs

{-# LANGUAGE UndecidableInstances #-}

module Blucontrol.Monad.PrepareValue.Const (
  PrepareValueConstT
, runPrepareValueConstT
) where

import Control.Monad.Base
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Control.Monad.Reader

import Blucontrol.Monad.PrepareValue

newtype PrepareValueConstT c m a = PrepareValueConstT { unPrepareValueConstT :: ReaderT c m a }
  deriving (Applicative, Functor, Monad, MonadBase b, MonadBaseControl b, MonadTrans, MonadTransControl)

instance Monad m => MonadPrepareValue (PrepareValueConstT c m) where
  type PreparedValue (PrepareValueConstT c m) = c
  preparedValue = PrepareValueConstT ask

runPrepareValueConstT :: c -> PrepareValueConstT c m a -> m a
runPrepareValueConstT !rgb tma = runReaderT (unPrepareValueConstT tma) rgb