packages feed

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)