Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (1.3 kB)

1
{-| Template Haskell code for Haskell to Python constants.
2

    
3
-}
4

    
5
{-
6

    
7
Copyright (C) 2013 Google Inc.
8

    
9
This program is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 2 of the License, or
12
(at your option) any later version.
13

    
14
This program is distributed in the hope that it will be useful, but
15
WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
General Public License for more details.
18

    
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
21
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22
02110-1301, USA.
23

    
24
-}
25
{-# LANGUAGE TemplateHaskell #-}
26
module Ganeti.Hs2Py.GenConstants (genPyConstants) where
27

    
28
import Language.Haskell.TH
29

    
30
import Ganeti.THH
31

    
32
genList :: Name -> [Name] -> Q [Dec]
33
genList name consNames = do
34
  let cons = listE $ map (\n -> tupE [mkString n, mkPyValueEx n]) consNames
35
  sig <- sigD name [t| [(String, String)] |]
36
  fun <- funD name [clause [] (normalB cons) []]
37
  return [sig, fun]
38
  where mkString n = stringE (deCamelCase (nameBase n))
39
        mkPyValueEx n = [| showValue $(varE n) |]
40

    
41
genPyConstants :: String -> [Name] -> Q [Dec]
42
genPyConstants name = genList (mkName name)