diff options
author | Csaba Hruska <csaba.hruska@gmail.com> | 2015-12-21 13:48:22 +0100 |
---|---|---|
committer | Csaba Hruska <csaba.hruska@gmail.com> | 2015-12-21 13:48:22 +0100 |
commit | befc5afb22b36d744c403d103d591c5d190d394f (patch) | |
tree | 05e390bef55b0662a9a919b886322b66b113ff21 /templates/data.hs.ede | |
parent | dc8e31235fccbe5ea54d94b0ca69e005ca88c7ea (diff) |
add lambdacube-ir haskell lib
Diffstat (limited to 'templates/data.hs.ede')
-rw-r--r-- | templates/data.hs.ede | 61 |
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 #-} | ||
5 | module {{ moduleName }} where | ||
6 | |||
7 | import Data.Int | ||
8 | import Data.Word | ||
9 | import Data.Map | ||
10 | import Data.Vector (Vector(..)) | ||
11 | import Linear | ||
12 | |||
13 | import Data.Text | ||
14 | import Data.Aeson hiding (Value,Bool) | ||
15 | import Data.Aeson.Types hiding (Value,Bool) | ||
16 | import Control.Monad | ||
17 | |||
18 | {% for m in imports %} | ||
19 | import {{ m.value }} | ||
20 | {% endfor %} | ||
21 | |||
22 | {% for t in dataAndType %} | ||
23 | {% case t.value | constType %} | ||
24 | {% when "DataDef" %} | ||
25 | data {{ 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" %} | ||
35 | type {{ t.value.aliasName }} = {{ t.value.aliasType | hsType }} | ||
36 | {% endcase %} | ||
37 | |||
38 | {% endfor %} | ||
39 | |||
40 | {% for t in definitions %} | ||
41 | instance 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 | |||
49 | instance 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 | ||