Safe Haskell | None |
---|---|
Language | Haskell2010 |
Store an Enum in the given backing word type
- data EnumField b a
- class CEnum a where
- fromEnumField :: EnumField b a -> a
- toEnumField :: a -> EnumField b a
- makeEnum :: forall a i. (Data a, Integral i) => i -> a
- makeEnumMaybe :: forall a i. (Data a, Integral i) => i -> Maybe a
- makeEnumWithCustom :: forall a i. (Data a, Integral i) => i -> a
Documentation
Store enum a
as a b
Eq a => Eq (EnumField b a) Source # | |
Show a => Show (EnumField b a) Source # | |
(Storable b, Integral b, CEnum a) => Storable (EnumField b a) Source # | |
(Integral b, StaticStorable b, CEnum a) => StaticStorable (EnumField b a) Source # | |
CEnum a => Field (EnumField b a) Source # | |
type SizeOf (EnumField b a) Source # | |
type Alignment (EnumField b a) Source # | |
By default, use fromEnumtoEnum to convert fromto an Integral.
But it can be overloaded to perform transformation before using fromEnum/toEnum. E.g. if values are shifted by 1 compared to Enum values, define fromCEnum = (+1) . fromIntegral . fromEnum
fromEnumField :: EnumField b a -> a Source #
Read an enum field
toEnumField :: a -> EnumField b a Source #
Create an enum field
makeEnum :: forall a i. (Data a, Integral i) => i -> a Source #
Make an enum from a number (0 indexed)
makeEnumMaybe :: forall a i. (Data a, Integral i) => i -> Maybe a Source #
Make an enum with the last constructor taking a parameter for the rest of the range, but don't build the last constructor
E.g., data T = A | B | C | D Word8 makeEnumMaybe :: Int -> T makeEnumMaybe x = case x of 0 -> Just A 1 -> Just B 2 -> Just C n -> Nothing
makeEnumWithCustom :: forall a i. (Data a, Integral i) => i -> a Source #
Make an enum with the last constructor taking a parameter for the rest of the range
E.g., data T = A | B | C | D Word8 makeEnumWithCustom :: Int -> T makeEnumWithCustom x = case x of 0 -> A 1 -> B 2 -> C n -> D (n - 3)