Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / Hs2Py / GenConstants.hs @ a40db327

History | View | Annotate | Download (1.7 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
fileFromModule :: Maybe String -> String
33
fileFromModule Nothing = ""
34
fileFromModule (Just name) = "src/" ++ map dotToSlash name ++ ".hs"
35
  where dotToSlash '.' = '/'
36
        dotToSlash c = c
37

    
38
comment :: Name -> String
39
comment name =
40
  "# Generated automatically from Haskell constant '" ++ nameBase name ++
41
  "' in file '" ++ fileFromModule (nameModule name) ++ "'"
42

    
43
genList :: Name -> [Name] -> Q [Dec]
44
genList name consNames = do
45
  let cons = listE $ map (\n -> tupE [mkString n, mkPyValueEx n]) consNames
46
  sig <- sigD name [t| [(String, String)] |]
47
  fun <- funD name [clause [] (normalB cons) []]
48
  return [sig, fun]
49
  where mkString n = stringE (comment n ++ "\n" ++ deCamelCase (nameBase n))
50
        mkPyValueEx n = [| showValue $(varE n) |]
51

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