blucontrol-0.7.0.0: src/Blucontrol/Main.hs
module Blucontrol.Main (
blucontrol
, BlucontrolConstraints
, ConfigControl (..)
) where
import Control.Monad.Trans.Control
import Blucontrol.Main.Control
import Blucontrol.Main.CLI
import Blucontrol.Monad.ApplyValue
import Blucontrol.Monad.Control
import Blucontrol.Monad.PrepareValue
import Blucontrol.Value
type BlucontrolConstraints mc mp ma =
( CompatibleValues (PreparedValue mp) (ApplicableValue ma)
, ControlConstraint mc (StM mp (StM ma ()))
, MonadBaseControl IO mp
, MonadBaseControl IO ma
, MonadApplyValue ma
, MonadControl mc
, MonadPrepareValue mp
)
blucontrol :: BlucontrolConstraints mc mp ma
=> ConfigControl mc mp ma
-> IO (StM mc (StM mp (StM ma ())))
blucontrol ConfigControl { runControl, runPrepareValue, runApplyValue } = do
launch
runControl $ liftBaseWith $ \ runC ->
runPrepareValue $ liftBaseWith $ \ runP ->
runApplyValue $ liftBaseWith $ \ runA ->
loopRecolor runC runP runA convertValue
data ConfigControl mc mp ma = ConfigControl { runControl :: forall a. mc a -> IO (StM mc a)
, runPrepareValue :: forall a. mp a -> IO (StM mp a)
, runApplyValue :: forall a. ma a -> IO (StM ma a)
}