Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / Hs2Py / GenConstants.hs @ 9d049fb4

History | View | Annotate | Download (1.7 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 a40db327 Jose A. Lopes
fileFromModule :: Maybe String -> String
33 a40db327 Jose A. Lopes
fileFromModule Nothing = ""
34 a40db327 Jose A. Lopes
fileFromModule (Just name) = "src/" ++ map dotToSlash name ++ ".hs"
35 a40db327 Jose A. Lopes
  where dotToSlash '.' = '/'
36 a40db327 Jose A. Lopes
        dotToSlash c = c
37 a40db327 Jose A. Lopes
38 a40db327 Jose A. Lopes
comment :: Name -> String
39 a40db327 Jose A. Lopes
comment name =
40 a40db327 Jose A. Lopes
  "# Generated automatically from Haskell constant '" ++ nameBase name ++
41 a40db327 Jose A. Lopes
  "' in file '" ++ fileFromModule (nameModule name) ++ "'"
42 a40db327 Jose A. Lopes
43 d34c79b6 Jose A. Lopes
genList :: Name -> [Name] -> Q [Dec]
44 d34c79b6 Jose A. Lopes
genList name consNames = do
45 d34c79b6 Jose A. Lopes
  let cons = listE $ map (\n -> tupE [mkString n, mkPyValueEx n]) consNames
46 d34c79b6 Jose A. Lopes
  sig <- sigD name [t| [(String, String)] |]
47 d34c79b6 Jose A. Lopes
  fun <- funD name [clause [] (normalB cons) []]
48 d34c79b6 Jose A. Lopes
  return [sig, fun]
49 a40db327 Jose A. Lopes
  where mkString n = stringE (comment n ++ "\n" ++ deCamelCase (nameBase n))
50 d34c79b6 Jose A. Lopes
        mkPyValueEx n = [| showValue $(varE n) |]
51 d34c79b6 Jose A. Lopes
52 d34c79b6 Jose A. Lopes
genPyConstants :: String -> [Name] -> Q [Dec]
53 d34c79b6 Jose A. Lopes
genPyConstants name = genList (mkName name)