summaryrefslogtreecommitdiff
path: root/templates/data.hs.ede
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2015-12-21 13:48:22 +0100
committerCsaba Hruska <csaba.hruska@gmail.com>2015-12-21 13:48:22 +0100
commitbefc5afb22b36d744c403d103d591c5d190d394f (patch)
tree05e390bef55b0662a9a919b886322b66b113ff21 /templates/data.hs.ede
parentdc8e31235fccbe5ea54d94b0ca69e005ca88c7ea (diff)
add lambdacube-ir haskell lib
Diffstat (limited to 'templates/data.hs.ede')
-rw-r--r--templates/data.hs.ede61
1 files changed, 0 insertions, 61 deletions
diff --git a/templates/data.hs.ede b/templates/data.hs.ede
deleted file mode 100644
index 54a148b..0000000
--- a/templates/data.hs.ede
+++ /dev/null
@@ -1,61 +0,0 @@
1-- generated file, do not modify!
2-- {{ dateTime }}
3
4{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
5module {{ moduleName }} where
6
7import Data.Int
8import Data.Word
9import Data.Map
10import Data.Vector (Vector(..))
11import Linear
12
13import Data.Text
14import Data.Aeson hiding (Value,Bool)
15import Data.Aeson.Types hiding (Value,Bool)
16import Control.Monad
17
18{% for m in imports %}
19import {{ m.value }}
20{% endfor %}
21
22{% for t in dataAndType %}
23{% case t.value | constType %}
24{% when "DataDef" %}
25data {{ t.value.dataName }}{% for c in t.value.constructors %}
26{% if c.value.fields | hasFieldNames %}
27 {% if c.first %}={% else %}|{% endif %} {{ c.value.name }}
28{% for f in c.value.fields %}{% if f.first %} { {%else%} , {%endif%}{{ f.value.fieldName }} :: {{ f.value.fieldType | hsType }}
29{% endfor %}
30 }
31{% else %}
32 {% if c.first %}={% else %}|{% endif %} {{ c.value.name }}{% for f in c.value.fields %} {{ f.value.fieldType | hsType | parens }}{% endfor %}{% endif %}{% endfor %}
33 deriving (Show, Eq, Ord)
34{% when "TypeAlias" %}
35type {{ t.value.aliasName }} = {{ t.value.aliasType | hsType }}
36{% endcase %}
37
38{% endfor %}
39
40{% for t in definitions %}
41instance ToJSON {{ t.value.dataName }} where
42 toJSON v = case v of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
43 {{ c.value.name }}{..} -> object
44 [ "tag" .= ("{{ c.value.name }}" :: Text){% for f in c.value.fields %}
45 , "{{ f.value.fieldName }}" .= {{ f.value.fieldName }}{% endfor %}
46 ]{% else %}
47 {{ c.value.name }}{% for f in c.value.fields %} arg{{ f.index0 }}{% endfor %} -> object [ "tag" .= ("{{ c.value.name }}" :: Text){% for f in c.value.fields %}, "arg{{ f.index0 }}" .= arg{{ f.index0 }}{% endfor %}]{% endif %}{% endfor %}
48
49instance FromJSON {{ t.value.dataName }} where
50 parseJSON (Object obj) = do
51 tag <- obj .: "tag"
52 case tag :: Text of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
53 "{{ c.value.name }}" -> do{% for f in c.value.fields %}
54 {{ f.value.fieldName }} <- obj .: "{{ f.value.fieldName }}"{% endfor %}
55 pure $ {{ c.value.name }}{% for f in c.value.fields %}
56 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }} = {{ f.value.fieldName }}{% endfor %}
57 } {% else %}
58 "{{ c.value.name }}" -> {% for f in c.value.fields %}{% if f.first %}{{ c.value.name }} <$>{% else %} <*>{% endif %} obj .: "arg{{ f.index0 }}"{%else%}pure {{ c.value.name }}{% endfor %}{% endif %}{% endfor %}
59 parseJSON _ = mzero
60
61{% endfor %} \ No newline at end of file