Revision a583ec5d htools/Ganeti/THH.hs
b/htools/Ganeti/THH.hs | ||
---|---|---|
33 | 33 |
, declareIADT |
34 | 34 |
, makeJSONInstance |
35 | 35 |
, genOpID |
36 |
, genAllOpIDs |
|
36 | 37 |
, genOpCode |
37 | 38 |
, genStrOfOp |
38 | 39 |
, genStrOfKey |
... | ... | |
399 | 400 |
genOpID :: Name -> String -> Q [Dec] |
400 | 401 |
genOpID = genConstrToStr deCamelCase |
401 | 402 |
|
403 |
-- | Builds a list with all defined constructor names for a type. |
|
404 |
-- |
|
405 |
-- @ |
|
406 |
-- vstr :: String |
|
407 |
-- vstr = [...] |
|
408 |
-- @ |
|
409 |
-- |
|
410 |
-- Where the actual values of the string are the constructor names |
|
411 |
-- mapped via @trans_fun@. |
|
412 |
genAllConstr :: (String -> String) -> Name -> String -> Q [Dec] |
|
413 |
genAllConstr trans_fun name vstr = do |
|
414 |
cnames <- reifyConsNames name |
|
415 |
let svalues = sort $ map trans_fun cnames |
|
416 |
vname = mkName vstr |
|
417 |
sig = SigD vname (AppT ListT (ConT ''String)) |
|
418 |
body = NormalB (ListE (map (LitE . StringL) svalues)) |
|
419 |
return $ [sig, ValD (VarP vname) body []] |
|
420 |
|
|
421 |
-- | Generates a list of all defined opcode IDs. |
|
422 |
genAllOpIDs :: Name -> String -> Q [Dec] |
|
423 |
genAllOpIDs = genAllConstr deCamelCase |
|
424 |
|
|
402 | 425 |
-- | OpCode parameter (field) type. |
403 | 426 |
type OpParam = (String, Q Type, Q Exp) |
404 | 427 |
|
Also available in: Unified diff