12 lines
332 B
Haskell
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))
|