on develop help sign in
Ensuring the correct deriving set gets propagated for enum types
commit4c5c18d5d5b0e7ae3a2b32279bbf8a7e25c37d97 authorBrendan Hay <brendan.g.hay@gmail.com> dateSat 26 Sep 2015, 17:24 (11 years ago) parent3b33e0b
4 files changed+19−9
gen/src/Gen/Solve.hs+2−2 gen/template/_include/sum.ede+13 gen/template/sum.ede+1 gen/template/types.ede+3−7
gen/src/Gen/Solve.hs+2−2
@@ -136,8 +136,8 @@ derive k = loc "derive" k $ memo derived k go
136136 go = \case
137137 Obj _ rs -> foldM props base (Map.elems rs)
138138 Arr _ r -> mappend monoid . intersect base <$> derive r
139− Enum {} -> pure enum
140− Ref _ r -> pure base -- derive (Free r)
139+ Enum {} -> pure (base <> enum)
140+ Ref _ r -> pure base
141141 Any _ -> pure base
142142 Lit _ l -> pure $
143143 case l of
gen/template/_include/sum.ede+13
@@ -13,3 +13,16 @@ data {{ type.name }}
1313 deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
1414
1515instance Hashable {{ type.name }}
16+
17+instance FromText {{ type.name }} where
18+ fromText = \case
19+ {% for branch in type.branches %}
20+ "{{ branch.value.value }}" -> Just {{ branch.value.name }}
21+ {% endfor %}
22+ _ -> Nothing
23+
24+instance ToText {{ type.name }} where
25+ toText = \case
26+ {% for branch in type.branches %}
27+ {{ branch.value.name }} -> "{{ branch.value.value }}"
28+ {% endfor %}
gen/template/sum.ede+1
@@ -1,6 +1,7 @@
11{-# LANGUAGE DeriveDataTypeable #-}
22{-# LANGUAGE DeriveGeneric #-}
33{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE LambdaCase #-}
45
56{-# OPTIONS_GHC -fno-warn-unused-imports #-}
67
gen/template/types.ede+3−7
@@ -2,19 +2,18 @@
22{-# LANGUAGE DeriveGeneric #-}
33{-# LANGUAGE OverloadedStrings #-}
44
5+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
6+
57{% include "_include/license.ede" %}
68--
79module {{ moduleName }}
810 (
9− -- * API Definition
10− {{ name | lowerHead }}
11−
1211 {% for schema in schemas %}
1312 {% case schema.value.type %}
1413 {% when "prod" %}
1514
1615 -- * {{ schema.value.name }}
17− , {{ schema.value.name }}
16+ {% if schema.first %} {% else %},{% endif %} {{ schema.value.name }}
1817 , {{ schema.value.ctor.name }}
1918 {% for lens in schema.value.lenses %}
2019 , {{ lens.value.name }}
@@ -30,6 +29,3 @@ module {{ moduleName }}
3029{% for import in moduleImports %}
3130import {{ import.value }}
3231{% endfor %}
33−
34−{{ name | lowerHead }} :: a
35−{{ name | lowerHead }} = error "{{ name }}"