packages feed

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