summaryrefslogtreecommitdiff
path: root/ddl/templates/data.purs.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 /ddl/templates/data.purs.ede
parentdc8e31235fccbe5ea54d94b0ca69e005ca88c7ea (diff)
add lambdacube-ir haskell lib
Diffstat (limited to 'ddl/templates/data.purs.ede')
-rw-r--r--ddl/templates/data.purs.ede68
1 files changed, 68 insertions, 0 deletions
diff --git a/ddl/templates/data.purs.ede b/ddl/templates/data.purs.ede
new file mode 100644
index 0000000..0474931
--- /dev/null
+++ b/ddl/templates/data.purs.ede
@@ -0,0 +1,68 @@
1-- generated file, do not modify!
2-- {{ dateTime }}
3
4module {{ moduleName }} where
5import Prelude
6import Data.Generic
7import Data.Maybe (Maybe(..))
8import Data.StrMap (StrMap(..))
9import Data.Map (Map(..))
10import Data.List (List(..))
11import Linear
12
13import Data.Argonaut.Combinators ((~>), (:=), (.?))
14import Data.Argonaut.Core (jsonEmptyObject)
15import Data.Argonaut.Printer (printJson)
16import Data.Argonaut.Encode (EncodeJson, encodeJson)
17import Data.Argonaut.Decode (DecodeJson, decodeJson)
18
19{% for m in imports %}
20import {{ m.value }}
21{% endfor %}
22
23{% for t in dataAndType %}
24{% case t.value | constType %}
25{% when "DataDef" %}
26data {{ t.value.dataName }}{% for c in t.value.constructors %}
27{% if c.value.fields | hasFieldNames %}
28 {% if c.first %}={% else %}|{% endif %} {{ c.value.name }}
29{% for f in c.value.fields %}{% if f.first %} { {%else%} , {%endif%}{{ f.value.fieldName }} :: {{ f.value.fieldType | psType }}
30{% endfor %}
31 }
32{% else %}
33 {% if c.first %}={% else %}|{% endif %} {{ c.value.name }}{% for f in c.value.fields %} {{ f.value.fieldType | psType | parens }}{% endfor %}{% endif %}{% endfor %}
34
35{% when "TypeAlias" %}
36type {{ t.value.aliasName }} = {{ t.value.aliasType | psType }}
37
38{% endcase %}
39{% endfor %}
40{% for t in definitions %}{% let l = t.value.instances | length %}{% if l > 0 %}{# FIXME!!! #}
41derive instance generic{{ t.value.dataName }} :: Generic {{ t.value.dataName }}
42instance show{{ t.value.dataName }} :: Show {{ t.value.dataName }} where show = gShow
43instance eq{{ t.value.dataName }} :: Eq {{ t.value.dataName }} where eq = gEq
44{% endif %}{% endlet %}{% endfor %}
45
46{# JSON Encode and Decode #}
47{% for t in definitions %}
48instance encodeJson{{ t.value.dataName }} :: EncodeJson {{ t.value.dataName }} where
49 encodeJson v = case v of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
50 {{ c.value.name }} r ->
51 "tag" := "{{ c.value.name }}" ~>{% for f in c.value.fields %}
52 "{{ f.value.fieldName }}" := r.{{ f.value.fieldName }} ~>{% endfor %}
53 jsonEmptyObject{% else %}
54 {{ c.value.name }}{% for f in c.value.fields %} arg{{ f.index0 }}{% endfor %} -> "tag" := "{{ c.value.name }}"{% for f in c.value.fields %} ~> "arg{{ f.index0 }}" := arg{{ f.index0 }}{% endfor %} ~> jsonEmptyObject{% endif %}{% endfor %}
55
56instance decodeJson{{ t.value.dataName }} :: DecodeJson {{ t.value.dataName }} where
57 decodeJson json = do
58 obj <- decodeJson json
59 tag <- obj .? "tag"
60 case tag of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
61 "{{ c.value.name }}" -> do{% for f in c.value.fields %}
62 {{ f.value.fieldName }} <- obj .? "{{ f.value.fieldName }}"{% endfor %}
63 pure $ {{ c.value.name }}{% for f in c.value.fields %}
64 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }}:{{ f.value.fieldName }}{% endfor %}
65 } {% else %}
66 "{{ 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 %}
67
68{% endfor %} \ No newline at end of file