hastron/src/Hastron/Utils.hs

12 lines
332 B
Haskell

module Hastron.Utils where
nextEnum :: (Enum a, Bounded a) => a -> a
nextEnum = turnEnum 1
prevEnum :: (Enum a, Bounded a) => a -> a
prevEnum = turnEnum (-1)
turnEnum :: (Enum a, Bounded a) => Int -> a -> a
turnEnum n e = toEnum $ mod (sum [fromEnum e, n]) enumLength
where enumLength = succ (fromEnum (maxBound `asTypeOf` e))