diff --git a/XMonad/Hooks/ManageHelpers.hs b/XMonad/Hooks/ManageHelpers.hs index faed9c27..3b7e1936 100644 --- a/XMonad/Hooks/ManageHelpers.hs +++ b/XMonad/Hooks/ManageHelpers.hs @@ -74,8 +74,8 @@ data Match a = Match Bool a -- | An alternative 'ManageHook' composer. Unlike 'composeAll' it stops as soon as -- a candidate returns a 'Just' value, effectively running only the first match -- (whereas 'composeAll' continues and executes all matching rules). -composeOne :: [MaybeManageHook] -> ManageHook -composeOne = foldr try idHook +composeOne :: (Monoid a, Monad m) => [m (Maybe a)] -> m a +composeOne = foldr try (return mempty) where try q z = do x <- q @@ -86,17 +86,17 @@ composeOne = foldr try idHook infixr 0 -?>, -->>, -?>> -- | q \/=? x. if the result of q equals x, return False -(/=?) :: Eq a => Query a -> a -> Query Bool +(/=?) :: (Eq a, Functor m) => m a -> a -> m Bool q /=? x = fmap (/= x) q -- | q <==? x. if the result of q equals x, return True grouped with q -(<==?) :: Eq a => Query a -> a -> Query (Match a) +(<==?) :: (Eq a, Functor m) => m a -> a -> m (Match a) q <==? x = fmap (`eq` x) q where eq q' x' = Match (q' == x') q' -- | q <\/=? x. if the result of q notequals x, return True grouped with q -(</=?) :: Eq a => Query a -> a -> Query (Match a) +(</=?) :: (Eq a, Functor m) => m a -> a -> m (Match a) q </=? x = fmap (`neq` x) q where neq q' x' = Match (q' /= x') q' @@ -104,19 +104,19 @@ q </=? x = fmap (`neq` x) q -- | A helper operator for use in 'composeOne'. It takes a condition and an action; -- if the condition fails, it returns 'Nothing' from the 'Query' so 'composeOne' will -- go on and try the next rule. -(-?>) :: Query Bool -> ManageHook -> MaybeManageHook +(-?>) :: (Functor m, Monad m) => m Bool -> m a -> m (Maybe a) p -?> f = do x <- p if x then fmap Just f else return Nothing -- | A helper operator for use in 'composeAll'. It takes a condition and a function taking a grouped datum to action. If 'p' is true, it executes the resulting action. -(-->>) :: Query (Match a) -> (a -> ManageHook) -> ManageHook +(-->>) :: (Monoid b, Monad m) => m (Match a) -> (a -> m b) -> m b p -->> f = do Match b m <- p - if b then (f m) else mempty + if b then (f m) else return mempty -- | A helper operator for use in 'composeOne'. It takes a condition and a function taking a groupdatum to action. If 'p' is true, it executes the resulting action. If it fails, it returns 'Nothing' from the 'Query' so 'composeOne' will go on and try the next rule. -(-?>>) :: Query (Match a) -> (a -> ManageHook) -> MaybeManageHook +(-?>>) :: (Functor m, Monad m) => m (Match a) -> (a -> m b) -> m (Maybe b) p -?>> f = do Match b m <- p if b then fmap Just (f m) else return Nothing @@ -180,7 +180,7 @@ transience' :: ManageHook transience' = maybeToDefinite transience -- | converts 'MaybeManageHook's to 'ManageHook's -maybeToDefinite :: MaybeManageHook -> ManageHook +maybeToDefinite :: (Monoid a, Functor m) => m (Maybe a) -> m a maybeToDefinite = fmap (fromMaybe mempty)