root / src / Ganeti / PyValueInstances.hs @ 84ad6b78
History | View | Annotate | Download (2.2 kB)
1 | c4d68e39 | Jose A. Lopes | {-| PyValueInstances contains instances for the 'PyValue' typeclass. |
---|---|---|---|
2 | c4d68e39 | Jose A. Lopes | |
3 | c4d68e39 | Jose A. Lopes | The typeclass 'PyValue' converts Haskell values to Python values. |
4 | c4d68e39 | Jose A. Lopes | This module contains instances of this typeclass for several generic |
5 | c4d68e39 | Jose A. Lopes | types. These instances are used in the Haskell to Python generation |
6 | c4d68e39 | Jose A. Lopes | of opcodes and constants, for example. |
7 | c4d68e39 | Jose A. Lopes | |
8 | c4d68e39 | Jose A. Lopes | -} |
9 | c4d68e39 | Jose A. Lopes | |
10 | c4d68e39 | Jose A. Lopes | {- |
11 | c4d68e39 | Jose A. Lopes | |
12 | c4d68e39 | Jose A. Lopes | Copyright (C) 2013 Google Inc. |
13 | c4d68e39 | Jose A. Lopes | |
14 | c4d68e39 | Jose A. Lopes | This program is free software; you can redistribute it and/or modify |
15 | c4d68e39 | Jose A. Lopes | it under the terms of the GNU General Public License as published by |
16 | c4d68e39 | Jose A. Lopes | the Free Software Foundation; either version 2 of the License, or |
17 | c4d68e39 | Jose A. Lopes | (at your option) any later version. |
18 | c4d68e39 | Jose A. Lopes | |
19 | c4d68e39 | Jose A. Lopes | This program is distributed in the hope that it will be useful, but |
20 | c4d68e39 | Jose A. Lopes | WITHOUT ANY WARRANTY; without even the implied warranty of |
21 | c4d68e39 | Jose A. Lopes | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
22 | c4d68e39 | Jose A. Lopes | General Public License for more details. |
23 | c4d68e39 | Jose A. Lopes | |
24 | c4d68e39 | Jose A. Lopes | You should have received a copy of the GNU General Public License |
25 | c4d68e39 | Jose A. Lopes | along with this program; if not, write to the Free Software |
26 | c4d68e39 | Jose A. Lopes | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
27 | c4d68e39 | Jose A. Lopes | 02110-1301, USA. |
28 | c4d68e39 | Jose A. Lopes | |
29 | c4d68e39 | Jose A. Lopes | -} |
30 | c4d68e39 | Jose A. Lopes | {-# LANGUAGE FlexibleInstances, OverlappingInstances, |
31 | c4d68e39 | Jose A. Lopes | TypeSynonymInstances, IncoherentInstances #-} |
32 | c4d68e39 | Jose A. Lopes | {-# OPTIONS_GHC -fno-warn-orphans #-} |
33 | c4d68e39 | Jose A. Lopes | module Ganeti.PyValueInstances where |
34 | c4d68e39 | Jose A. Lopes | |
35 | c4d68e39 | Jose A. Lopes | import Data.List (intercalate) |
36 | c4d68e39 | Jose A. Lopes | import Data.Map (Map) |
37 | c4d68e39 | Jose A. Lopes | import qualified Data.Map as Map |
38 | 4651c69f | Jose A. Lopes | import qualified Data.Set as Set (toList) |
39 | c4d68e39 | Jose A. Lopes | |
40 | 4651c69f | Jose A. Lopes | import Ganeti.BasicTypes |
41 | c4d68e39 | Jose A. Lopes | import Ganeti.THH |
42 | c4d68e39 | Jose A. Lopes | |
43 | c4d68e39 | Jose A. Lopes | instance PyValue Bool |
44 | c4d68e39 | Jose A. Lopes | instance PyValue Int |
45 | c4d68e39 | Jose A. Lopes | instance PyValue Double |
46 | c4d68e39 | Jose A. Lopes | instance PyValue Char |
47 | c4d68e39 | Jose A. Lopes | |
48 | c4d68e39 | Jose A. Lopes | instance (PyValue a, PyValue b) => PyValue (a, b) where |
49 | 92b28956 | Jose A. Lopes | showValue (x, y) = "(" ++ showValue x ++ "," ++ showValue y ++ ")" |
50 | c4d68e39 | Jose A. Lopes | |
51 | 14874844 | Jose A. Lopes | instance (PyValue a, PyValue b, PyValue c) => PyValue (a, b, c) where |
52 | 14874844 | Jose A. Lopes | showValue (x, y, z) = |
53 | 14874844 | Jose A. Lopes | "(" ++ |
54 | 14874844 | Jose A. Lopes | showValue x ++ "," ++ |
55 | 14874844 | Jose A. Lopes | showValue y ++ "," ++ |
56 | 14874844 | Jose A. Lopes | showValue z ++ |
57 | 14874844 | Jose A. Lopes | ")" |
58 | 14874844 | Jose A. Lopes | |
59 | c4d68e39 | Jose A. Lopes | instance PyValue String where |
60 | c4d68e39 | Jose A. Lopes | showValue = show |
61 | c4d68e39 | Jose A. Lopes | |
62 | c4d68e39 | Jose A. Lopes | instance PyValue a => PyValue [a] where |
63 | 3a933ed8 | Jose A. Lopes | showValue xs = "[" ++ intercalate "," (map showValue xs) ++ "]" |
64 | c4d68e39 | Jose A. Lopes | |
65 | c4d68e39 | Jose A. Lopes | instance (PyValue k, PyValue a) => PyValue (Map k a) where |
66 | c4d68e39 | Jose A. Lopes | showValue mp = |
67 | c4d68e39 | Jose A. Lopes | "{" ++ intercalate ", " (map showPair (Map.assocs mp)) ++ "}" |
68 | 92b28956 | Jose A. Lopes | where showPair (k, x) = showValue k ++ ":" ++ showValue x |
69 | c4d68e39 | Jose A. Lopes | |
70 | 4651c69f | Jose A. Lopes | instance PyValue a => PyValue (ListSet a) where |
71 | 4651c69f | Jose A. Lopes | showValue = showValue . Set.toList . unListSet |