{-# LANGUAGE UndecidableInstances #-} module Blucontrol.Monad.ApplyValue.X ( ApplyValueXT , runApplyValueXTIO , ApplicableValueX , ConfigX (..) , XError (..) ) where import Control.DeepSeq import Control.Exception.Lifted (SomeException (..), bracket, catch) import Control.Monad.Base import Control.Monad.Trans.Control import Control.Monad.Trans.Control.Default import Control.Monad.Reader import Control.Monad.Except import Data.Default import Data.Maybe (fromMaybe) import qualified Data.Text as T import Data.Word import GHC.Generics import Graphics.X11.Xlib.Display (closeDisplay, defaultScreen, openDisplay, rootWindow) import Graphics.X11.Xlib.Types (Display) import Blucontrol.Monad.ApplyValue import Blucontrol.Monad.ApplyValue.X.Internal import Blucontrol.Value import Blucontrol.Value.RGB newtype ApplyValueXT m a = ApplyValueXT { forall (m :: * -> *) a. ApplyValueXT m a -> ExceptT XError (ReaderT Display m) a unApplyValueXT :: ExceptT XError (ReaderT Display m) a } deriving (Functor (ApplyValueXT m) Functor (ApplyValueXT m) -> (forall a. a -> ApplyValueXT m a) -> (forall a b. ApplyValueXT m (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b) -> (forall a b c. (a -> b -> c) -> ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m c) -> (forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b) -> (forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m a) -> Applicative (ApplyValueXT m) forall a. a -> ApplyValueXT m a forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m a forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b forall a b. ApplyValueXT m (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b forall a b c. (a -> b -> c) -> ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m c forall {m :: * -> *}. Monad m => Functor (ApplyValueXT m) forall (m :: * -> *) a. Monad m => a -> ApplyValueXT m a forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m a forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b forall (m :: * -> *) a b. Monad m => ApplyValueXT m (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b forall (m :: * -> *) a b c. Monad m => (a -> b -> c) -> ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT 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 $cpure :: forall (m :: * -> *) a. Monad m => a -> ApplyValueXT m a pure :: forall a. a -> ApplyValueXT m a $c<*> :: forall (m :: * -> *) a b. Monad m => ApplyValueXT m (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b <*> :: forall a b. ApplyValueXT m (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b $cliftA2 :: forall (m :: * -> *) a b c. Monad m => (a -> b -> c) -> ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m c liftA2 :: forall a b c. (a -> b -> c) -> ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m c $c*> :: forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b *> :: forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b $c<* :: forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m a <* :: forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m a Applicative, (forall a b. (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b) -> (forall a b. a -> ApplyValueXT m b -> ApplyValueXT m a) -> Functor (ApplyValueXT m) forall a b. a -> ApplyValueXT m b -> ApplyValueXT m a forall a b. (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b forall (m :: * -> *) a b. Functor m => a -> ApplyValueXT m b -> ApplyValueXT m a forall (m :: * -> *) a b. Functor m => (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f $cfmap :: forall (m :: * -> *) a b. Functor m => (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b fmap :: forall a b. (a -> b) -> ApplyValueXT m a -> ApplyValueXT m b $c<$ :: forall (m :: * -> *) a b. Functor m => a -> ApplyValueXT m b -> ApplyValueXT m a <$ :: forall a b. a -> ApplyValueXT m b -> ApplyValueXT m a Functor, Applicative (ApplyValueXT m) Applicative (ApplyValueXT m) -> (forall a b. ApplyValueXT m a -> (a -> ApplyValueXT m b) -> ApplyValueXT m b) -> (forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b) -> (forall a. a -> ApplyValueXT m a) -> Monad (ApplyValueXT m) forall a. a -> ApplyValueXT m a forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b forall a b. ApplyValueXT m a -> (a -> ApplyValueXT m b) -> ApplyValueXT m b forall (m :: * -> *). Monad m => Applicative (ApplyValueXT m) forall (m :: * -> *) a. Monad m => a -> ApplyValueXT m a forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> (a -> ApplyValueXT m b) -> ApplyValueXT 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 $c>>= :: forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> (a -> ApplyValueXT m b) -> ApplyValueXT m b >>= :: forall a b. ApplyValueXT m a -> (a -> ApplyValueXT m b) -> ApplyValueXT m b $c>> :: forall (m :: * -> *) a b. Monad m => ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b >> :: forall a b. ApplyValueXT m a -> ApplyValueXT m b -> ApplyValueXT m b $creturn :: forall (m :: * -> *) a. Monad m => a -> ApplyValueXT m a return :: forall a. a -> ApplyValueXT m a Monad, MonadBase b, MonadBaseControl b, MonadError XError) deriving ((forall (m :: * -> *) a. Monad m => m a -> ApplyValueXT m a) -> MonadTrans ApplyValueXT forall (m :: * -> *) a. Monad m => m a -> ApplyValueXT m a forall (t :: (* -> *) -> * -> *). (forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t $clift :: forall (m :: * -> *) a. Monad m => m a -> ApplyValueXT m a lift :: forall (m :: * -> *) a. Monad m => m a -> ApplyValueXT m a MonadTrans, MonadTrans ApplyValueXT MonadTrans ApplyValueXT -> (forall (m :: * -> *) a. Monad m => (Run ApplyValueXT -> m a) -> ApplyValueXT m a) -> (forall (m :: * -> *) a. Monad m => m (StT ApplyValueXT a) -> ApplyValueXT m a) -> MonadTransControl ApplyValueXT forall (m :: * -> *) a. Monad m => m (StT ApplyValueXT a) -> ApplyValueXT m a forall (m :: * -> *) a. Monad m => (Run ApplyValueXT -> m a) -> ApplyValueXT 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 $cliftWith :: forall (m :: * -> *) a. Monad m => (Run ApplyValueXT -> m a) -> ApplyValueXT m a liftWith :: forall (m :: * -> *) a. Monad m => (Run ApplyValueXT -> m a) -> ApplyValueXT m a $crestoreT :: forall (m :: * -> *) a. Monad m => m (StT ApplyValueXT a) -> ApplyValueXT m a restoreT :: forall (m :: * -> *) a. Monad m => m (StT ApplyValueXT a) -> ApplyValueXT m a MonadTransControl) via Stack2T (ExceptT XError) (ReaderT Display) instance MonadBaseControl IO m => MonadApplyValue (ApplyValueXT m) where type ApplicableValue (ApplyValueXT m) = ApplicableValueX applyValue :: ApplicableValue (ApplyValueXT m) -> ApplyValueXT m () applyValue ApplicableValue (ApplyValueXT m) rgb = do Display display <- ExceptT XError (ReaderT Display m) Display -> ApplyValueXT m Display forall (m :: * -> *) a. ExceptT XError (ReaderT Display m) a -> ApplyValueXT m a ApplyValueXT ExceptT XError (ReaderT Display m) Display forall r (m :: * -> *). MonadReader r m => m r ask Window root <- XError -> IO Window -> ApplyValueXT m Window forall (m :: * -> *) a. (MonadBaseControl IO m, MonadError XError m) => XError -> IO a -> m a liftXIO XError XErrorRead (IO Window -> ApplyValueXT m Window) -> IO Window -> ApplyValueXT m Window forall a b. (a -> b) -> a -> b $ Display -> ScreenNumber -> IO Window rootWindow Display display (ScreenNumber -> IO Window) -> ScreenNumber -> IO Window forall a b. (a -> b) -> a -> b $ Display -> ScreenNumber defaultScreen Display display XError -> IO () -> ApplyValueXT m () forall (m :: * -> *) a. (MonadBaseControl IO m, MonadError XError m) => XError -> IO a -> m a liftXIO XError XErrorSetGamma (IO () -> ApplyValueXT m ()) -> IO () -> ApplyValueXT m () forall a b. (a -> b) -> a -> b $ XRRGamma -> Display -> Window -> IO () xrrSetGamma (ApplicableValueX -> XRRGamma unApplicableValueX ApplicableValue (ApplyValueXT m) ApplicableValueX rgb) Display display Window root runApplyValueXT :: Display -> ApplyValueXT m a -> m (Either XError a) runApplyValueXT :: forall (m :: * -> *) a. Display -> ApplyValueXT m a -> m (Either XError a) runApplyValueXT Display display ApplyValueXT m a tma = ReaderT Display m (Either XError a) -> Display -> m (Either XError a) forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT (ExceptT XError (ReaderT Display m) a -> ReaderT Display m (Either XError a) forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a) runExceptT (ApplyValueXT m a -> ExceptT XError (ReaderT Display m) a forall (m :: * -> *) a. ApplyValueXT m a -> ExceptT XError (ReaderT Display m) a unApplyValueXT ApplyValueXT m a tma)) Display display data ConfigX = ConfigX { ConfigX -> Maybe Text hostName :: Maybe T.Text , ConfigX -> Int displayServer :: Int , ConfigX -> Maybe Int screen :: Maybe Int } deriving (ConfigX -> ConfigX -> Bool (ConfigX -> ConfigX -> Bool) -> (ConfigX -> ConfigX -> Bool) -> Eq ConfigX forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ConfigX -> ConfigX -> Bool == :: ConfigX -> ConfigX -> Bool $c/= :: ConfigX -> ConfigX -> Bool /= :: ConfigX -> ConfigX -> Bool Eq, (forall x. ConfigX -> Rep ConfigX x) -> (forall x. Rep ConfigX x -> ConfigX) -> Generic ConfigX forall x. Rep ConfigX x -> ConfigX forall x. ConfigX -> Rep ConfigX x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. ConfigX -> Rep ConfigX x from :: forall x. ConfigX -> Rep ConfigX x $cto :: forall x. Rep ConfigX x -> ConfigX to :: forall x. Rep ConfigX x -> ConfigX Generic, Eq ConfigX Eq ConfigX -> (ConfigX -> ConfigX -> Ordering) -> (ConfigX -> ConfigX -> Bool) -> (ConfigX -> ConfigX -> Bool) -> (ConfigX -> ConfigX -> Bool) -> (ConfigX -> ConfigX -> Bool) -> (ConfigX -> ConfigX -> ConfigX) -> (ConfigX -> ConfigX -> ConfigX) -> Ord ConfigX ConfigX -> ConfigX -> Bool ConfigX -> ConfigX -> Ordering ConfigX -> ConfigX -> ConfigX forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: ConfigX -> ConfigX -> Ordering compare :: ConfigX -> ConfigX -> Ordering $c< :: ConfigX -> ConfigX -> Bool < :: ConfigX -> ConfigX -> Bool $c<= :: ConfigX -> ConfigX -> Bool <= :: ConfigX -> ConfigX -> Bool $c> :: ConfigX -> ConfigX -> Bool > :: ConfigX -> ConfigX -> Bool $c>= :: ConfigX -> ConfigX -> Bool >= :: ConfigX -> ConfigX -> Bool $cmax :: ConfigX -> ConfigX -> ConfigX max :: ConfigX -> ConfigX -> ConfigX $cmin :: ConfigX -> ConfigX -> ConfigX min :: ConfigX -> ConfigX -> ConfigX Ord, ReadPrec [ConfigX] ReadPrec ConfigX Int -> ReadS ConfigX ReadS [ConfigX] (Int -> ReadS ConfigX) -> ReadS [ConfigX] -> ReadPrec ConfigX -> ReadPrec [ConfigX] -> Read ConfigX forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a $creadsPrec :: Int -> ReadS ConfigX readsPrec :: Int -> ReadS ConfigX $creadList :: ReadS [ConfigX] readList :: ReadS [ConfigX] $creadPrec :: ReadPrec ConfigX readPrec :: ReadPrec ConfigX $creadListPrec :: ReadPrec [ConfigX] readListPrec :: ReadPrec [ConfigX] Read, Int -> ConfigX -> ShowS [ConfigX] -> ShowS ConfigX -> String (Int -> ConfigX -> ShowS) -> (ConfigX -> String) -> ([ConfigX] -> ShowS) -> Show ConfigX forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ConfigX -> ShowS showsPrec :: Int -> ConfigX -> ShowS $cshow :: ConfigX -> String show :: ConfigX -> String $cshowList :: [ConfigX] -> ShowS showList :: [ConfigX] -> ShowS Show) instance NFData ConfigX instance Default ConfigX where def :: ConfigX def = ConfigX { hostName :: Maybe Text hostName = Maybe Text forall a. Maybe a Nothing , displayServer :: Int displayServer = Int 0 , screen :: Maybe Int screen = Maybe Int forall a. Maybe a Nothing } data XError = XErrorCloseDisplay | XErrorOpenDisplay | XErrorRead | XErrorSetGamma deriving (XError XError -> XError -> Bounded XError forall a. a -> a -> Bounded a $cminBound :: XError minBound :: XError $cmaxBound :: XError maxBound :: XError Bounded, Int -> XError XError -> Int XError -> [XError] XError -> XError XError -> XError -> [XError] XError -> XError -> XError -> [XError] (XError -> XError) -> (XError -> XError) -> (Int -> XError) -> (XError -> Int) -> (XError -> [XError]) -> (XError -> XError -> [XError]) -> (XError -> XError -> [XError]) -> (XError -> XError -> XError -> [XError]) -> Enum XError forall a. (a -> a) -> (a -> a) -> (Int -> a) -> (a -> Int) -> (a -> [a]) -> (a -> a -> [a]) -> (a -> a -> [a]) -> (a -> a -> a -> [a]) -> Enum a $csucc :: XError -> XError succ :: XError -> XError $cpred :: XError -> XError pred :: XError -> XError $ctoEnum :: Int -> XError toEnum :: Int -> XError $cfromEnum :: XError -> Int fromEnum :: XError -> Int $cenumFrom :: XError -> [XError] enumFrom :: XError -> [XError] $cenumFromThen :: XError -> XError -> [XError] enumFromThen :: XError -> XError -> [XError] $cenumFromTo :: XError -> XError -> [XError] enumFromTo :: XError -> XError -> [XError] $cenumFromThenTo :: XError -> XError -> XError -> [XError] enumFromThenTo :: XError -> XError -> XError -> [XError] Enum, XError -> XError -> Bool (XError -> XError -> Bool) -> (XError -> XError -> Bool) -> Eq XError forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: XError -> XError -> Bool == :: XError -> XError -> Bool $c/= :: XError -> XError -> Bool /= :: XError -> XError -> Bool Eq, (forall x. XError -> Rep XError x) -> (forall x. Rep XError x -> XError) -> Generic XError forall x. Rep XError x -> XError forall x. XError -> Rep XError x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. XError -> Rep XError x from :: forall x. XError -> Rep XError x $cto :: forall x. Rep XError x -> XError to :: forall x. Rep XError x -> XError Generic, Eq XError Eq XError -> (XError -> XError -> Ordering) -> (XError -> XError -> Bool) -> (XError -> XError -> Bool) -> (XError -> XError -> Bool) -> (XError -> XError -> Bool) -> (XError -> XError -> XError) -> (XError -> XError -> XError) -> Ord XError XError -> XError -> Bool XError -> XError -> Ordering XError -> XError -> XError forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: XError -> XError -> Ordering compare :: XError -> XError -> Ordering $c< :: XError -> XError -> Bool < :: XError -> XError -> Bool $c<= :: XError -> XError -> Bool <= :: XError -> XError -> Bool $c> :: XError -> XError -> Bool > :: XError -> XError -> Bool $c>= :: XError -> XError -> Bool >= :: XError -> XError -> Bool $cmax :: XError -> XError -> XError max :: XError -> XError -> XError $cmin :: XError -> XError -> XError min :: XError -> XError -> XError Ord, ReadPrec [XError] ReadPrec XError Int -> ReadS XError ReadS [XError] (Int -> ReadS XError) -> ReadS [XError] -> ReadPrec XError -> ReadPrec [XError] -> Read XError forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a $creadsPrec :: Int -> ReadS XError readsPrec :: Int -> ReadS XError $creadList :: ReadS [XError] readList :: ReadS [XError] $creadPrec :: ReadPrec XError readPrec :: ReadPrec XError $creadListPrec :: ReadPrec [XError] readListPrec :: ReadPrec [XError] Read, Int -> XError -> ShowS [XError] -> ShowS XError -> String (Int -> XError -> ShowS) -> (XError -> String) -> ([XError] -> ShowS) -> Show XError forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> XError -> ShowS showsPrec :: Int -> XError -> ShowS $cshow :: XError -> String show :: XError -> String $cshowList :: [XError] -> ShowS showList :: [XError] -> ShowS Show) instance NFData XError liftXIO :: (MonadBaseControl IO m, MonadError XError m) => XError -> IO a -> m a liftXIO :: forall (m :: * -> *) a. (MonadBaseControl IO m, MonadError XError m) => XError -> IO a -> m a liftXIO XError xError = (m a -> (SomeException -> m a) -> m a) -> (SomeException -> m a) -> m a -> m a forall a b c. (a -> b -> c) -> b -> a -> c flip m a -> (SomeException -> m a) -> m a forall (m :: * -> *) e a. (MonadBaseControl IO m, Exception e) => m a -> (e -> m a) -> m a catch SomeException -> m a throwXError (m a -> m a) -> (IO a -> m a) -> IO a -> m a forall b c a. (b -> c) -> (a -> b) -> a -> c . IO a -> m a forall α. IO α -> m α forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α liftBase where throwXError :: SomeException -> m a throwXError (SomeException e _) = XError -> m a forall a. XError -> m a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError XError xError runApplyValueXTIO :: MonadBaseControl IO m => ConfigX -> ApplyValueXT m a -> m (Either XError a) runApplyValueXTIO :: forall (m :: * -> *) a. MonadBaseControl IO m => ConfigX -> ApplyValueXT m a -> m (Either XError a) runApplyValueXTIO !ConfigX conf ApplyValueXT m a tma = ExceptT XError m a -> m (Either XError a) forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a) runExceptT (ExceptT XError m a -> m (Either XError a)) -> ExceptT XError m a -> m (Either XError a) forall a b. (a -> b) -> a -> b $ ExceptT XError m Display -> (Display -> ExceptT XError m ()) -> (Display -> ExceptT XError m a) -> ExceptT XError m a forall (m :: * -> *) a b c. MonadBaseControl IO m => m a -> (a -> m b) -> (a -> m c) -> m c bracket ExceptT XError m Display open Display -> ExceptT XError m () forall {m :: * -> *}. (MonadBaseControl IO m, MonadError XError m) => Display -> m () close Display -> ExceptT XError m a run where open :: ExceptT XError m Display open = XError -> IO Display -> ExceptT XError m Display forall (m :: * -> *) a. (MonadBaseControl IO m, MonadError XError m) => XError -> IO a -> m a liftXIO XError XErrorOpenDisplay (IO Display -> ExceptT XError m Display) -> IO Display -> ExceptT XError m Display forall a b. (a -> b) -> a -> b $ String -> IO Display openDisplay (String -> IO Display) -> String -> IO Display forall a b. (a -> b) -> a -> b $ ConfigX -> String showDisplay ConfigX conf close :: Display -> m () close Display display = XError -> IO () -> m () forall (m :: * -> *) a. (MonadBaseControl IO m, MonadError XError m) => XError -> IO a -> m a liftXIO XError XErrorCloseDisplay (IO () -> m ()) -> IO () -> m () forall a b. (a -> b) -> a -> b $ Display -> IO () closeDisplay Display display run :: Display -> ExceptT XError m a run Display display = m (StT (ExceptT XError) a) -> ExceptT XError m a forall (m :: * -> *) a. Monad m => m (StT (ExceptT XError) a) -> ExceptT XError m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTransControl t, Monad m) => m (StT t a) -> t m a restoreT (m (StT (ExceptT XError) a) -> ExceptT XError m a) -> m (StT (ExceptT XError) a) -> ExceptT XError m a forall a b. (a -> b) -> a -> b $ Display -> ApplyValueXT m a -> m (Either XError a) forall (m :: * -> *) a. Display -> ApplyValueXT m a -> m (Either XError a) runApplyValueXT Display display ApplyValueXT m a tma showDisplay :: ConfigX -> String showDisplay :: ConfigX -> String showDisplay ConfigX { Maybe Text hostName :: ConfigX -> Maybe Text hostName :: Maybe Text hostName, Int displayServer :: ConfigX -> Int displayServer :: Int displayServer, Maybe Int screen :: ConfigX -> Maybe Int screen :: Maybe Int screen } = Text -> String T.unpack (Text -> String) -> ([Text] -> Text) -> [Text] -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . [Text] -> Text T.concat ([Text] -> String) -> [Text] -> String forall a b. (a -> b) -> a -> b $ [ Text -> Maybe Text -> Text forall a. a -> Maybe a -> a fromMaybe Text "" Maybe Text hostName , Text ":" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> String -> Text T.pack (Int -> String forall a. Show a => a -> String show Int displayServer) , Text -> (Int -> Text) -> Maybe Int -> Text forall b a. b -> (a -> b) -> Maybe a -> b maybe Text "" ((Text "." Text -> Text -> Text forall a. Semigroup a => a -> a -> a <>) (Text -> Text) -> (Int -> Text) -> Int -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text T.pack (String -> Text) -> (Int -> String) -> Int -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> String forall a. Show a => a -> String show) Maybe Int screen ] newtype ApplicableValueX = ApplicableValueX { ApplicableValueX -> XRRGamma unApplicableValueX :: XRRGamma } deriving (ApplicableValueX -> ApplicableValueX -> Bool (ApplicableValueX -> ApplicableValueX -> Bool) -> (ApplicableValueX -> ApplicableValueX -> Bool) -> Eq ApplicableValueX forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ApplicableValueX -> ApplicableValueX -> Bool == :: ApplicableValueX -> ApplicableValueX -> Bool $c/= :: ApplicableValueX -> ApplicableValueX -> Bool /= :: ApplicableValueX -> ApplicableValueX -> Bool Eq, (forall x. ApplicableValueX -> Rep ApplicableValueX x) -> (forall x. Rep ApplicableValueX x -> ApplicableValueX) -> Generic ApplicableValueX forall x. Rep ApplicableValueX x -> ApplicableValueX forall x. ApplicableValueX -> Rep ApplicableValueX x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. ApplicableValueX -> Rep ApplicableValueX x from :: forall x. ApplicableValueX -> Rep ApplicableValueX x $cto :: forall x. Rep ApplicableValueX x -> ApplicableValueX to :: forall x. Rep ApplicableValueX x -> ApplicableValueX Generic, Eq ApplicableValueX Eq ApplicableValueX -> (ApplicableValueX -> ApplicableValueX -> Ordering) -> (ApplicableValueX -> ApplicableValueX -> Bool) -> (ApplicableValueX -> ApplicableValueX -> Bool) -> (ApplicableValueX -> ApplicableValueX -> Bool) -> (ApplicableValueX -> ApplicableValueX -> Bool) -> (ApplicableValueX -> ApplicableValueX -> ApplicableValueX) -> (ApplicableValueX -> ApplicableValueX -> ApplicableValueX) -> Ord ApplicableValueX ApplicableValueX -> ApplicableValueX -> Bool ApplicableValueX -> ApplicableValueX -> Ordering ApplicableValueX -> ApplicableValueX -> ApplicableValueX forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: ApplicableValueX -> ApplicableValueX -> Ordering compare :: ApplicableValueX -> ApplicableValueX -> Ordering $c< :: ApplicableValueX -> ApplicableValueX -> Bool < :: ApplicableValueX -> ApplicableValueX -> Bool $c<= :: ApplicableValueX -> ApplicableValueX -> Bool <= :: ApplicableValueX -> ApplicableValueX -> Bool $c> :: ApplicableValueX -> ApplicableValueX -> Bool > :: ApplicableValueX -> ApplicableValueX -> Bool $c>= :: ApplicableValueX -> ApplicableValueX -> Bool >= :: ApplicableValueX -> ApplicableValueX -> Bool $cmax :: ApplicableValueX -> ApplicableValueX -> ApplicableValueX max :: ApplicableValueX -> ApplicableValueX -> ApplicableValueX $cmin :: ApplicableValueX -> ApplicableValueX -> ApplicableValueX min :: ApplicableValueX -> ApplicableValueX -> ApplicableValueX Ord, ReadPrec [ApplicableValueX] ReadPrec ApplicableValueX Int -> ReadS ApplicableValueX ReadS [ApplicableValueX] (Int -> ReadS ApplicableValueX) -> ReadS [ApplicableValueX] -> ReadPrec ApplicableValueX -> ReadPrec [ApplicableValueX] -> Read ApplicableValueX forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a $creadsPrec :: Int -> ReadS ApplicableValueX readsPrec :: Int -> ReadS ApplicableValueX $creadList :: ReadS [ApplicableValueX] readList :: ReadS [ApplicableValueX] $creadPrec :: ReadPrec ApplicableValueX readPrec :: ReadPrec ApplicableValueX $creadListPrec :: ReadPrec [ApplicableValueX] readListPrec :: ReadPrec [ApplicableValueX] Read, Int -> ApplicableValueX -> ShowS [ApplicableValueX] -> ShowS ApplicableValueX -> String (Int -> ApplicableValueX -> ShowS) -> (ApplicableValueX -> String) -> ([ApplicableValueX] -> ShowS) -> Show ApplicableValueX forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ApplicableValueX -> ShowS showsPrec :: Int -> ApplicableValueX -> ShowS $cshow :: ApplicableValueX -> String show :: ApplicableValueX -> String $cshowList :: [ApplicableValueX] -> ShowS showList :: [ApplicableValueX] -> ShowS Show) instance NFData ApplicableValueX instance CompatibleValues (RGB Word8) ApplicableValueX where convertValue :: RGB Word8 -> ApplicableValueX convertValue RGB { Word8 red :: Word8 red :: forall a. RGB a -> a red, Word8 green :: Word8 green :: forall a. RGB a -> a green, Word8 blue :: Word8 blue :: forall a. RGB a -> a blue } = XRRGamma -> ApplicableValueX ApplicableValueX XRRGamma { Float xrr_gamma_red :: Float xrr_gamma_red :: Float xrr_gamma_red, Float xrr_gamma_green :: Float xrr_gamma_green :: Float xrr_gamma_green, Float xrr_gamma_blue :: Float xrr_gamma_blue :: Float xrr_gamma_blue } where xrr_gamma_red :: Float xrr_gamma_red = Word8 -> Float word8ToFloat Word8 red xrr_gamma_green :: Float xrr_gamma_green = Word8 -> Float word8ToFloat Word8 green xrr_gamma_blue :: Float xrr_gamma_blue = Word8 -> Float word8ToFloat Word8 blue word8ToFloat :: Word8 -> Float word8ToFloat = (Float -> Float -> Float forall a. Fractional a => a -> a -> a / Word8 -> Float forall a b. (Integral a, Num b) => a -> b fromIntegral (forall a. Bounded a => a maxBound @Word8)) (Float -> Float) -> (Word8 -> Float) -> Word8 -> Float forall b c a. (b -> c) -> (a -> b) -> a -> c . Word8 -> Float forall a b. (Integral a, Num b) => a -> b fromIntegral