Safe Haskell | None |
---|---|
Language | Haskell2010 |
Foreign.C.Enum
Documentation
enum :: String -> Name -> [Name] -> [(String, Integer)] -> DecsQ Source #
Write like the following.
enum "Foo" ''Int [''Show, ''Read, ''Eq] [ ("FooError", - 1), ("FooZero", 0), ("FooOne", 1), ("FooTwo", 2) ]
Then you get like the following.
newtype Foo = Foo Int deriving Eq pattern FooError :: Int -> Foo pattern FooError <- Foo (- 1) where FooError = Foo (- 1) pattern FooZero :: Int -> Foo ... instance Show Foo where showsPrec = ... instance Read Foo where readPrec = ...
And you can read and show like the following.
> Foo $ - 1 FooError > FooTwo FooTwo > Foo 3 Foo 3 > read "Foo (- 1)" :: Foo FooError > read "FooOne" :: Foo FooOne