hmt-base-0.20: Music/Theory/Bool.hs
-- | Boolean functions.
module Music.Theory.Bool where
import Data.List {- base -}
{- | If-then-else as a function.
> ifThenElse True "true" "false" == "true"
-}
ifThenElse :: Bool -> a -> a -> a
ifThenElse p q r = if p then q else r
{- | Case analysis as a function.
Find first key that is True else elseValue.
> caseElse "z" [(True,"x"),(False,"y")] == "x"
> caseElse "z" [(False,"x"),(False,"y")] == "z"
-}
caseElse :: t -> [(Bool, t)] -> t
caseElse elseValue = maybe elseValue snd . find fst
{- | Case-of analysis as a function.
Find first key that compares equal to selectValue else elseValue.
> caseOfElse "z" 'b' [('a',"x"),('b',"y")] == "y"
-}
caseOfElse :: Eq k => v -> k -> [(k, v)] -> v
caseOfElse elseValue selectValue = maybe elseValue snd . find ((== selectValue) . fst)