module Blucontrol.Main ( blucontrol , BlucontrolConstraints , ConfigControl (..) ) where import Control.Monad.Trans.Control import Blucontrol.Main.Control import Blucontrol.Main.CLI import Blucontrol.Monad.Control import Blucontrol.Monad.Gamma import Blucontrol.Monad.Recolor import Blucontrol.Value type BlucontrolConstraints m g r = ( ControlConstraint m (StM g (StM r ())) , MonadControl m , MonadBaseControl IO g , MonadBaseControl IO r , MonadGamma g , MonadRecolor r , CompatibleValues (GammaValue g) (RecolorValue r) ) blucontrol :: BlucontrolConstraints m g r => ConfigControl m g r -> IO (StM m (StM g (StM r ()))) blucontrol :: ConfigControl m g r -> IO (StM m (StM g (StM r ()))) blucontrol ConfigControl { forall a. m a -> IO (StM m a) runControl :: forall (m :: * -> *) (g :: * -> *) (r :: * -> *). ConfigControl m g r -> forall a. m a -> IO (StM m a) runControl :: forall a. m a -> IO (StM m a) runControl, forall a. g a -> IO (StM g a) runGamma :: forall (m :: * -> *) (g :: * -> *) (r :: * -> *). ConfigControl m g r -> forall a. g a -> IO (StM g a) runGamma :: forall a. g a -> IO (StM g a) runGamma, forall a. r a -> IO (StM r a) runRecolor :: forall (m :: * -> *) (g :: * -> *) (r :: * -> *). ConfigControl m g r -> forall a. r a -> IO (StM r a) runRecolor :: forall a. r a -> IO (StM r a) runRecolor } = do IO () launch m (StM g (StM r ())) -> IO (StM m (StM g (StM r ()))) forall a. m a -> IO (StM m a) runControl (m (StM g (StM r ())) -> IO (StM m (StM g (StM r ())))) -> m (StM g (StM r ())) -> IO (StM m (StM g (StM r ()))) forall a b. (a -> b) -> a -> b $ ((forall a. m a -> IO (StM m a)) -> IO (StM g (StM r ()))) -> m (StM g (StM r ())) forall (b :: * -> *) (m :: * -> *) a. MonadBaseControl b m => (RunInBase m b -> b a) -> m a liftBaseWith (((forall a. m a -> IO (StM m a)) -> IO (StM g (StM r ()))) -> m (StM g (StM r ()))) -> ((forall a. m a -> IO (StM m a)) -> IO (StM g (StM r ()))) -> m (StM g (StM r ())) forall a b. (a -> b) -> a -> b $ \ forall a. m a -> IO (StM m a) runC -> g (StM r ()) -> IO (StM g (StM r ())) forall a. g a -> IO (StM g a) runGamma (g (StM r ()) -> IO (StM g (StM r ()))) -> g (StM r ()) -> IO (StM g (StM r ())) forall a b. (a -> b) -> a -> b $ ((forall a. g a -> IO (StM g a)) -> IO (StM r ())) -> g (StM r ()) forall (b :: * -> *) (m :: * -> *) a. MonadBaseControl b m => (RunInBase m b -> b a) -> m a liftBaseWith (((forall a. g a -> IO (StM g a)) -> IO (StM r ())) -> g (StM r ())) -> ((forall a. g a -> IO (StM g a)) -> IO (StM r ())) -> g (StM r ()) forall a b. (a -> b) -> a -> b $ \ forall a. g a -> IO (StM g a) runG -> r () -> IO (StM r ()) forall a. r a -> IO (StM r a) runRecolor (r () -> IO (StM r ())) -> r () -> IO (StM r ()) forall a b. (a -> b) -> a -> b $ ((forall a. r a -> IO (StM r a)) -> IO ()) -> r () forall (b :: * -> *) (m :: * -> *) a. MonadBaseControl b m => (RunInBase m b -> b a) -> m a liftBaseWith (((forall a. r a -> IO (StM r a)) -> IO ()) -> r ()) -> ((forall a. r a -> IO (StM r a)) -> IO ()) -> r () forall a b. (a -> b) -> a -> b $ \ forall a. r a -> IO (StM r a) runR -> (forall a. m a -> IO (StM m a)) -> (forall a. g a -> IO (StM g a)) -> (forall a. r a -> IO (StM r a)) -> (GammaValue g -> RecolorValue r) -> IO () forall (m :: * -> *) (g :: * -> *) (r :: * -> *). (MonadBaseControl IO m, MonadBaseControl IO g, MonadBaseControl IO r, MonadControl m, MonadGamma g, MonadRecolor r, ControlConstraint m (StM g (StM r ()))) => RunInBase m IO -> RunInBase g IO -> RunInBase r IO -> (GammaValue g -> RecolorValue r) -> IO () loopRecolor forall a. m a -> IO (StM m a) runC forall a. g a -> IO (StM g a) runG forall a. r a -> IO (StM r a) runR GammaValue g -> RecolorValue r forall a b. CompatibleValues a b => a -> b convertValue data ConfigControl m g r = ConfigControl { ConfigControl m g r -> forall a. m a -> IO (StM m a) runControl :: forall a. m a -> IO (StM m a) , ConfigControl m g r -> forall a. g a -> IO (StM g a) runGamma :: forall a. g a -> IO (StM g a) , ConfigControl m g r -> forall a. r a -> IO (StM r a) runRecolor :: forall a. r a -> IO (StM r a) }