Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / Hs2Py / GenConstants.hs @ 4c9fdf69

History | View | Annotate | Download (1.3 kB)

1 d34c79b6 Jose A. Lopes
{-| Template Haskell code for Haskell to Python constants.
2 d34c79b6 Jose A. Lopes
3 d34c79b6 Jose A. Lopes
-}
4 d34c79b6 Jose A. Lopes
5 d34c79b6 Jose A. Lopes
{-
6 d34c79b6 Jose A. Lopes
7 d34c79b6 Jose A. Lopes
Copyright (C) 2013 Google Inc.
8 d34c79b6 Jose A. Lopes
9 d34c79b6 Jose A. Lopes
This program is free software; you can redistribute it and/or modify
10 d34c79b6 Jose A. Lopes
it under the terms of the GNU General Public License as published by
11 d34c79b6 Jose A. Lopes
the Free Software Foundation; either version 2 of the License, or
12 d34c79b6 Jose A. Lopes
(at your option) any later version.
13 d34c79b6 Jose A. Lopes
14 d34c79b6 Jose A. Lopes
This program is distributed in the hope that it will be useful, but
15 d34c79b6 Jose A. Lopes
WITHOUT ANY WARRANTY; without even the implied warranty of
16 d34c79b6 Jose A. Lopes
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 d34c79b6 Jose A. Lopes
General Public License for more details.
18 d34c79b6 Jose A. Lopes
19 d34c79b6 Jose A. Lopes
You should have received a copy of the GNU General Public License
20 d34c79b6 Jose A. Lopes
along with this program; if not, write to the Free Software
21 d34c79b6 Jose A. Lopes
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 d34c79b6 Jose A. Lopes
02110-1301, USA.
23 d34c79b6 Jose A. Lopes
24 d34c79b6 Jose A. Lopes
-}
25 d34c79b6 Jose A. Lopes
{-# LANGUAGE TemplateHaskell #-}
26 d34c79b6 Jose A. Lopes
module Ganeti.Hs2Py.GenConstants (genPyConstants) where
27 d34c79b6 Jose A. Lopes
28 d34c79b6 Jose A. Lopes
import Language.Haskell.TH
29 d34c79b6 Jose A. Lopes
30 d34c79b6 Jose A. Lopes
import Ganeti.THH
31 d34c79b6 Jose A. Lopes
32 d34c79b6 Jose A. Lopes
genList :: Name -> [Name] -> Q [Dec]
33 d34c79b6 Jose A. Lopes
genList name consNames = do
34 d34c79b6 Jose A. Lopes
  let cons = listE $ map (\n -> tupE [mkString n, mkPyValueEx n]) consNames
35 d34c79b6 Jose A. Lopes
  sig <- sigD name [t| [(String, String)] |]
36 d34c79b6 Jose A. Lopes
  fun <- funD name [clause [] (normalB cons) []]
37 d34c79b6 Jose A. Lopes
  return [sig, fun]
38 d34c79b6 Jose A. Lopes
  where mkString n = stringE (deCamelCase (nameBase n))
39 d34c79b6 Jose A. Lopes
        mkPyValueEx n = [| showValue $(varE n) |]
40 d34c79b6 Jose A. Lopes
41 d34c79b6 Jose A. Lopes
genPyConstants :: String -> [Name] -> Q [Dec]
42 d34c79b6 Jose A. Lopes
genPyConstants name = genList (mkName name)