c-enum 0.1.1.0 → 0.1.1.2
raw patch · 2 files changed
+22/−10 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Foreign.C.Enum: enumMems :: String -> [(String, Integer)] -> DecsQ
Files
- c-enum.cabal +1/−1
- src/Foreign/C/Enum.hs +21/−9
c-enum.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: c-enum-version: 0.1.1.0+version: 0.1.1.2 synopsis: To make a type corresponding to an enum of C language description: Please see the README on GitHub at <https://github.com/YoshikuniJujo/c-enum#readme> category: Foreign
src/Foreign/C/Enum.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} -module Foreign.C.Enum (enum) where+module Foreign.C.Enum (enum, enumMems) where import Language.Haskell.TH ( Name, mkName, newName, Lit(..), clause, cxt, normalB,@@ -27,7 +27,7 @@ <*> bool (pure id) ((:) <$> mkRead nt ns) br <*> bool (pure id) ((:) <$> deriveStorable (mkName nt) t) bst- <*> mkMembers nt nvs+ <*> enumMems nt nvs where ShowReadClasses bs br bst ds' = showReadClasses ds; ns = fst <$> nvs {- ^@@ -35,11 +35,11 @@ Write like the following. @-enum Foo ''Int [''Show, ''Read, ''Eq] [- ("FooError", - 1),- ("FooZero", 0),- ("FooOne", 1),- ("FooTwo", 2) ]+enum \"Foo\" ''Int [''Show, ''Read, ''Eq] [+ (\"FooError\", - 1),+ (\"FooZero\", 0),+ (\"FooOne\", 1),+ (\"FooTwo\", 2) ] @ Then you get like the following.@@ -103,8 +103,20 @@ (conT t)]) [derivClause Nothing $ conT <$> ds] -mkMembers :: String -> [(String, Integer)] -> DecsQ-mkMembers t nvs = concat <$> uncurry (mkMember (mkName t)) `mapM` nvs+enumMems :: String -> [(String, Integer)] -> DecsQ+enumMems t nvs = concat <$> uncurry (mkMember (mkName t)) `mapM` nvs++{- ^++You can define enum members separately.++@+enumMems \"Foo\" [+ (\"FooThree\", 3),+ (\"FooFour\", 4) ]+@++-} mkMember :: Name -> String -> Integer -> DecsQ mkMember t n v = sequence [