on develop help sign in
Ensuring the correct deriving set gets propagated for enum types
4c5c18dBrendan Hay
gen/src/Gen/Solve.hs+2−2
@@ -136,8 +136,8 @@ derive k = loc "derive" k $ memo derived k go
136 go = \case
136 go = \case
137 Obj _ rs -> foldM props base (Map.elems rs)
137 Obj _ rs -> foldM props base (Map.elems rs)
138 Arr _ r -> mappend monoid . intersect base <$> derive r
138 Arr _ r -> mappend monoid . intersect base <$> derive r
139− Enum {} -> pure enum
139+ Enum {} -> pure (base <> enum)
140− Ref _ r -> pure base -- derive (Free r)
140+ Ref _ r -> pure base
141 Any _ -> pure base
141 Any _ -> pure base
142 Lit _ l -> pure $
142 Lit _ l -> pure $
143 case l of
143 case l of
gen/template/_include/sum.ede+13
@@ -13,3 +13,16 @@ data {{ type.name }}
13 deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
13 deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
14
14
15instance Hashable {{ type.name }}
15instance 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 @@
1{-# LANGUAGE DeriveDataTypeable #-}
1{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE LambdaCase #-}
4
5
5{-# OPTIONS_GHC -fno-warn-unused-imports #-}
6{-# OPTIONS_GHC -fno-warn-unused-imports #-}
6
7
gen/template/types.ede+3−7
@@ -2,19 +2,18 @@
2{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4
4
5+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
6+
5{% include "_include/license.ede" %}
7{% include "_include/license.ede" %}
6--
8--
7module {{ moduleName }}
9module {{ moduleName }}
8 (
10 (
9− -- * API Definition
10− {{ name | lowerHead }}
11−
12 {% for schema in schemas %}
11 {% for schema in schemas %}
13 {% case schema.value.type %}
12 {% case schema.value.type %}
14 {% when "prod" %}
13 {% when "prod" %}
15
14
16 -- * {{ schema.value.name }}
15 -- * {{ schema.value.name }}
17− , {{ schema.value.name }}
16+ {% if schema.first %} {% else %},{% endif %} {{ schema.value.name }}
18 , {{ schema.value.ctor.name }}
17 , {{ schema.value.ctor.name }}
19 {% for lens in schema.value.lenses %}
18 {% for lens in schema.value.lenses %}
20 , {{ lens.value.name }}
19 , {{ lens.value.name }}
@@ -30,6 +29,3 @@ module {{ moduleName }}
30{% for import in moduleImports %}
29{% for import in moduleImports %}
31import {{ import.value }}
30import {{ import.value }}
32{% endfor %}
31{% endfor %}
33−
34−{{ name | lowerHead }} :: a
35−{{ name | lowerHead }} = error "{{ name }}"