{-# LANGUAGE UndecidableInstances #-} module Blucontrol.Gamma.Const ( GammaConstT , runGammaConstT ) where import Control.Monad.Base import Control.Monad.Trans import Control.Monad.Trans.Control import Control.Monad.Reader import Blucontrol.Gamma import Blucontrol.RGB newtype GammaConstT m a = GammaConstT { GammaConstT m a -> ReaderT Trichromaticity m a unGammaConstT :: ReaderT Trichromaticity m a } deriving (Functor (GammaConstT m) a -> GammaConstT m a Functor (GammaConstT m) -> (forall a. a -> GammaConstT m a) -> (forall a b. GammaConstT m (a -> b) -> GammaConstT m a -> GammaConstT m b) -> (forall a b c. (a -> b -> c) -> GammaConstT m a -> GammaConstT m b -> GammaConstT m c) -> (forall a b. GammaConstT m a -> GammaConstT m b -> GammaConstT m b) -> (forall a b. GammaConstT m a -> GammaConstT m b -> GammaConstT m a) -> Applicative (GammaConstT m) GammaConstT m a -> GammaConstT m b -> GammaConstT m b GammaConstT m a -> GammaConstT m b -> GammaConstT m a GammaConstT m (a -> b) -> GammaConstT m a -> GammaConstT m b (a -> b -> c) -> GammaConstT m a -> GammaConstT m b -> GammaConstT m c forall a. a -> GammaConstT m a forall a b. GammaConstT m a -> GammaConstT m b -> GammaConstT m a forall a b. GammaConstT m a -> GammaConstT m b -> GammaConstT m b forall a b. GammaConstT m (a -> b) -> GammaConstT m a -> GammaConstT m b forall a b c. (a -> b -> c) -> GammaConstT m a -> GammaConstT m b -> GammaConstT m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall (m :: * -> *). Applicative m => Functor (GammaConstT m) forall (m :: * -> *) a. Applicative m => a -> GammaConstT m a forall (m :: * -> *) a b. Applicative m => GammaConstT m a -> GammaConstT m b -> GammaConstT m a forall (m :: * -> *) a b. Applicative m => GammaConstT m a -> GammaConstT m b -> GammaConstT m b forall (m :: * -> *) a b. Applicative m => GammaConstT m (a -> b) -> GammaConstT m a -> GammaConstT m b forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> GammaConstT m a -> GammaConstT m b -> GammaConstT m c <* :: GammaConstT m a -> GammaConstT m b -> GammaConstT m a $c<* :: forall (m :: * -> *) a b. Applicative m => GammaConstT m a -> GammaConstT m b -> GammaConstT m a *> :: GammaConstT m a -> GammaConstT m b -> GammaConstT m b $c*> :: forall (m :: * -> *) a b. Applicative m => GammaConstT m a -> GammaConstT m b -> GammaConstT m b liftA2 :: (a -> b -> c) -> GammaConstT m a -> GammaConstT m b -> GammaConstT m c $cliftA2 :: forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> GammaConstT m a -> GammaConstT m b -> GammaConstT m c <*> :: GammaConstT m (a -> b) -> GammaConstT m a -> GammaConstT m b $c<*> :: forall (m :: * -> *) a b. Applicative m => GammaConstT m (a -> b) -> GammaConstT m a -> GammaConstT m b pure :: a -> GammaConstT m a $cpure :: forall (m :: * -> *) a. Applicative m => a -> GammaConstT m a $cp1Applicative :: forall (m :: * -> *). Applicative m => Functor (GammaConstT m) Applicative, a -> GammaConstT m b -> GammaConstT m a (a -> b) -> GammaConstT m a -> GammaConstT m b (forall a b. (a -> b) -> GammaConstT m a -> GammaConstT m b) -> (forall a b. a -> GammaConstT m b -> GammaConstT m a) -> Functor (GammaConstT m) forall a b. a -> GammaConstT m b -> GammaConstT m a forall a b. (a -> b) -> GammaConstT m a -> GammaConstT m b forall (m :: * -> *) a b. Functor m => a -> GammaConstT m b -> GammaConstT m a forall (m :: * -> *) a b. Functor m => (a -> b) -> GammaConstT m a -> GammaConstT m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> GammaConstT m b -> GammaConstT m a $c<$ :: forall (m :: * -> *) a b. Functor m => a -> GammaConstT m b -> GammaConstT m a fmap :: (a -> b) -> GammaConstT m a -> GammaConstT m b $cfmap :: forall (m :: * -> *) a b. Functor m => (a -> b) -> GammaConstT m a -> GammaConstT m b Functor, Applicative (GammaConstT m) a -> GammaConstT m a Applicative (GammaConstT m) -> (forall a b. GammaConstT m a -> (a -> GammaConstT m b) -> GammaConstT m b) -> (forall a b. GammaConstT m a -> GammaConstT m b -> GammaConstT m b) -> (forall a. a -> GammaConstT m a) -> Monad (GammaConstT m) GammaConstT m a -> (a -> GammaConstT m b) -> GammaConstT m b GammaConstT m a -> GammaConstT m b -> GammaConstT m b forall a. a -> GammaConstT m a forall a b. GammaConstT m a -> GammaConstT m b -> GammaConstT m b forall a b. GammaConstT m a -> (a -> GammaConstT m b) -> GammaConstT m b forall (m :: * -> *). Monad m => Applicative (GammaConstT m) forall (m :: * -> *) a. Monad m => a -> GammaConstT m a forall (m :: * -> *) a b. Monad m => GammaConstT m a -> GammaConstT m b -> GammaConstT m b forall (m :: * -> *) a b. Monad m => GammaConstT m a -> (a -> GammaConstT m b) -> GammaConstT m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: a -> GammaConstT m a $creturn :: forall (m :: * -> *) a. Monad m => a -> GammaConstT m a >> :: GammaConstT m a -> GammaConstT m b -> GammaConstT m b $c>> :: forall (m :: * -> *) a b. Monad m => GammaConstT m a -> GammaConstT m b -> GammaConstT m b >>= :: GammaConstT m a -> (a -> GammaConstT m b) -> GammaConstT m b $c>>= :: forall (m :: * -> *) a b. Monad m => GammaConstT m a -> (a -> GammaConstT m b) -> GammaConstT m b $cp1Monad :: forall (m :: * -> *). Monad m => Applicative (GammaConstT m) Monad, MonadBase b, MonadBaseControl b, m a -> GammaConstT m a (forall (m :: * -> *) a. Monad m => m a -> GammaConstT m a) -> MonadTrans GammaConstT forall (m :: * -> *) a. Monad m => m a -> GammaConstT m a forall (t :: (* -> *) -> * -> *). (forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t lift :: m a -> GammaConstT m a $clift :: forall (m :: * -> *) a. Monad m => m a -> GammaConstT m a MonadTrans, MonadTrans GammaConstT m (StT GammaConstT a) -> GammaConstT m a MonadTrans GammaConstT -> (forall (m :: * -> *) a. Monad m => (Run GammaConstT -> m a) -> GammaConstT m a) -> (forall (m :: * -> *) a. Monad m => m (StT GammaConstT a) -> GammaConstT m a) -> MonadTransControl GammaConstT (Run GammaConstT -> m a) -> GammaConstT m a forall (m :: * -> *) a. Monad m => m (StT GammaConstT a) -> GammaConstT m a forall (m :: * -> *) a. Monad m => (Run GammaConstT -> m a) -> GammaConstT m a forall (t :: (* -> *) -> * -> *). MonadTrans t -> (forall (m :: * -> *) a. Monad m => (Run t -> m a) -> t m a) -> (forall (m :: * -> *) a. Monad m => m (StT t a) -> t m a) -> MonadTransControl t restoreT :: m (StT GammaConstT a) -> GammaConstT m a $crestoreT :: forall (m :: * -> *) a. Monad m => m (StT GammaConstT a) -> GammaConstT m a liftWith :: (Run GammaConstT -> m a) -> GammaConstT m a $cliftWith :: forall (m :: * -> *) a. Monad m => (Run GammaConstT -> m a) -> GammaConstT m a $cp1MonadTransControl :: MonadTrans GammaConstT MonadTransControl) instance Monad m => MonadGamma (GammaConstT m) where gamma :: GammaConstT m Trichromaticity gamma = ReaderT Trichromaticity m Trichromaticity -> GammaConstT m Trichromaticity forall (m :: * -> *) a. ReaderT Trichromaticity m a -> GammaConstT m a GammaConstT ReaderT Trichromaticity m Trichromaticity forall r (m :: * -> *). MonadReader r m => m r ask instance MonadReader r m => MonadReader r (GammaConstT m) where ask :: GammaConstT m r ask = m r -> GammaConstT m r forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m r forall r (m :: * -> *). MonadReader r m => m r ask local :: (r -> r) -> GammaConstT m a -> GammaConstT m a local r -> r f GammaConstT m a tma = (Run GammaConstT -> m a) -> GammaConstT m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => (Run t -> m a) -> t m a liftWith ((Run GammaConstT -> m a) -> GammaConstT m a) -> (Run GammaConstT -> m a) -> GammaConstT m a forall a b. (a -> b) -> a -> b $ \ Run GammaConstT run -> (r -> r) -> m a -> m a forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a local r -> r f (m a -> m a) -> m a -> m a forall a b. (a -> b) -> a -> b $ GammaConstT m a -> m (StT GammaConstT a) Run GammaConstT run GammaConstT m a tma runGammaConstT :: Trichromaticity -> GammaConstT m a -> m a runGammaConstT :: Trichromaticity -> GammaConstT m a -> m a runGammaConstT Trichromaticity rgb GammaConstT m a tma = ReaderT Trichromaticity m a -> Trichromaticity -> m a forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT (GammaConstT m a -> ReaderT Trichromaticity m a forall (m :: * -> *) a. GammaConstT m a -> ReaderT Trichromaticity m a unGammaConstT GammaConstT m a tma) Trichromaticity rgb