Revision ffbd9592 htools/Ganeti/THH.hs
b/htools/Ganeti/THH.hs | ||
---|---|---|
328 | 328 |
-- @ |
329 | 329 |
-- |
330 | 330 |
-- in an instance JSON /name/ declaration |
331 |
genShowJSON :: String -> Q [Dec] |
|
332 |
genShowJSON name = [d| showJSON = JSON.showJSON . $(varE (toRawName name)) |] |
|
331 |
genShowJSON :: String -> Q Dec |
|
332 |
genShowJSON name = do |
|
333 |
body <- [| JSON.showJSON . $(varE (toRawName name)) |] |
|
334 |
return $ FunD (mkName "showJSON") [Clause [] (NormalB body) []] |
|
333 | 335 |
|
334 | 336 |
-- | Creates the readJSON member of a JSON instance declaration. |
335 | 337 |
-- |
... | ... | |
363 | 365 |
let base = nameBase name |
364 | 366 |
showJ <- genShowJSON base |
365 | 367 |
readJ <- genReadJSON base |
366 |
return [InstanceD [] (AppT (ConT ''JSON.JSON) (ConT name)) (readJ:showJ)]
|
|
368 |
return [InstanceD [] (AppT (ConT ''JSON.JSON) (ConT name)) [readJ,showJ]]
|
|
367 | 369 |
|
368 | 370 |
-- * Template code for opcodes |
369 | 371 |
|
... | ... | |
595 | 597 |
shjson <- objectShowJSON sname |
596 | 598 |
rdjson <- objectReadJSON sname |
597 | 599 |
let instdecl = InstanceD [] (AppT (ConT ''JSON.JSON) (ConT name)) |
598 |
(rdjson:shjson)
|
|
600 |
[rdjson, shjson]
|
|
599 | 601 |
return $ savedecls ++ [loadsig, loadfn, instdecl] |
600 | 602 |
|
601 | 603 |
genSaveObject :: (Name -> Field -> Q Exp) |
... | ... | |
634 | 636 |
nameE = stringE (fieldName field) |
635 | 637 |
fvarE = varE fvar |
636 | 638 |
|
637 |
objectShowJSON :: String -> Q [Dec] |
|
638 |
objectShowJSON name = |
|
639 |
[d| showJSON = JSON.showJSON . $(varE . mkName $ "save" ++ name) |] |
|
639 |
objectShowJSON :: String -> Q Dec |
|
640 |
objectShowJSON name = do |
|
641 |
body <- [| JSON.showJSON . $(varE . mkName $ "save" ++ name) |] |
|
642 |
return $ FunD (mkName "showJSON") [Clause [] (NormalB body) []] |
|
640 | 643 |
|
641 | 644 |
genLoadObject :: (Field -> Q (Name, Stmt)) |
642 | 645 |
-> String -> [Field] -> Q (Dec, Dec) |
... | ... | |
732 | 735 |
shjson <- objectShowJSON sname |
733 | 736 |
rdjson <- objectReadJSON sname |
734 | 737 |
let instdecl = InstanceD [] (AppT (ConT ''JSON.JSON) (ConT name)) |
735 |
(rdjson:shjson)
|
|
738 |
[rdjson, shjson]
|
|
736 | 739 |
return $ savedecls ++ [loadsig, loadfn, instdecl] |
737 | 740 |
|
738 | 741 |
savePParamField :: Name -> Field -> Q Exp |
Also available in: Unified diff