X.U.Run: Add >&&> and >||>

This commit is contained in:
Tony Zorman 2023-08-08 20:03:49 +02:00
parent 0ca3ce7a18
commit 1b7fd6d8c9
2 changed files with 25 additions and 0 deletions

View File

@ -172,6 +172,8 @@
- Added `toList` to easily lift a `String` to an `X Input`.
- Added `>&&>` and `>||>` to glue together different inputs.
* `XMonad.Util.Parser`
- Added the `gather`, `count`, `between`, `option`, `optionally`,

View File

@ -60,6 +60,8 @@ module XMonad.Util.Run (
-- ** General Combinators
(>->),
(>-$),
(>&&>),
(>||>),
inWorkingDir,
eval,
execute,
@ -361,6 +363,24 @@ infixr 3 >->
(>-$) xi xs = xi >-> fmap mkDList xs
infixr 3 >-$
-- | @a >&&> b@ glues the different inputs @a@ and @b@ by means of @&&@.
-- For example,
--
-- @
-- pure "do something" >&&> pure "do another thing"
-- @
--
-- would result in @do something && do another thing@ being executed by a
-- shell.
(>&&>) :: X Input -> X Input -> X Input
a >&&> b = comp3 <$> a <*> toInput " && " <*> b
infixr 2 >&&>
-- | Like '(>&&>)', but with @||@.
(>||>) :: X Input -> X Input -> X Input
a >||> b = comp3 <$> a <*> toInput " || " <*> b
infixr 2 >||>
-- | Spawn a completed input.
proc :: X Input -> X ()
proc xi = spawn =<< getInput xi
@ -540,3 +560,6 @@ tryQuote :: String -> String
tryQuote s = case dropWhile (== ' ') s of
'\'' : _ -> s
_ -> "'" <> s <> "'"
comp3 :: (c -> d) -> (b -> c) -> (a -> b) -> a -> d
comp3 f g h = f . g . h