v4l2-0.1: Foreign/Extra/CEnum.hs
module Foreign.Extra.CEnum
( fromCEnum
, toCEnum
) where
fromCEnum :: (Ord h, Eq c) => [(h, c)] -> (c -> h) -> c -> h
fromCEnum spec unknown enum = case enum `lookup` map swap spec of
Nothing -> unknown enum
Just h -> h
where
swap (a, b) = (b, a)
toCEnum :: Eq h => [(h, c)] -> (h -> Bool) -> (h -> c) -> h -> c
toCEnum spec isUnknown unUnknown h
| isUnknown h = unUnknown h
| otherwise = case h `lookup` spec of
Nothing -> error "toCEnum"
Just c -> c