on master help sign in
Convenience isos
f48d807Denis Redozubov
src/Data/Schematic/Lens.hs+32−1
@@ -10,6 +10,11 @@ module Data.Schematic.Lens
10 , FSubset(..)
10 , FSubset(..)
11 , obj
11 , obj
12 , arr
12 , arr
13+ , uni
14+ , txt
15+ , num
16+ , opt
17+ , bln
13 , textRepr
18 , textRepr
14 , numberRepr
19 , numberRepr
15 , boolRepr
20 , boolRepr
@@ -23,6 +28,7 @@ import Data.Schematic.Schema
23import Data.Scientific
28import Data.Scientific
24import Data.Singletons
29import Data.Singletons
25import Data.Text
30import Data.Text
31+import Data.Union
26import Data.Vector as V
32import Data.Vector as V
27import Data.Vinyl
33import Data.Vinyl
28import Data.Vinyl.Functor
34import Data.Vinyl.Functor
@@ -179,10 +185,35 @@ optionalRepr
179 => Iso' (FieldRepr '(fn, ('SchemaOptional schema))) (Maybe (JsonRepr schema))
185 => Iso' (FieldRepr '(fn, ('SchemaOptional schema))) (Maybe (JsonRepr schema))
180optionalRepr = iso (\(FieldRepr (ReprOptional r)) -> r) (FieldRepr . ReprOptional)
186optionalRepr = iso (\(FieldRepr (ReprOptional r)) -> r) (FieldRepr . ReprOptional)
181
187
188+obj
189+ :: SingI fields
182−obj :: (SingI fields) => Iso' (JsonRepr ('SchemaObject fields)) (Rec FieldRepr fields)
190+ => Iso' (JsonRepr ('SchemaObject fields)) (Rec FieldRepr fields)
183obj = iso (\(ReprObject r) -> r) ReprObject
191obj = iso (\(ReprObject r) -> r) ReprObject
184
192
185arr
193arr
186 :: (SingI schema)
194 :: (SingI schema)
187 => Iso' (JsonRepr ('SchemaArray cs schema)) (V.Vector (JsonRepr schema))
195 => Iso' (JsonRepr ('SchemaArray cs schema)) (V.Vector (JsonRepr schema))
188arr = iso (\(ReprArray r) -> r) ReprArray
196arr = iso (\(ReprArray r) -> r) ReprArray
197+
198+uni
199+ :: SingI (h ': tl)
200+ => Iso' (JsonRepr ('SchemaUnion (h ': tl))) (Union JsonRepr (h ': tl))
201+uni = iso (\(ReprUnion u) -> u) ReprUnion
202+
203+txt
204+ :: SingI cs
205+ => Iso' (JsonRepr ('SchemaText cs)) Text
206+txt = iso (\(ReprText t) -> t) ReprText
207+
208+num
209+ :: SingI cs
210+ => Iso' (JsonRepr ('SchemaNumber cs)) Scientific
211+num = iso (\(ReprNumber t) -> t) ReprNumber
212+
213+bln :: Iso' (JsonRepr 'SchemaBoolean) Bool
214+bln = iso (\(ReprBoolean b) -> b) ReprBoolean
215+
216+opt
217+ :: SingI schema
218+ => Iso' (JsonRepr ('SchemaOptional schema)) (Maybe (JsonRepr schema))
219+opt = iso (\(ReprOptional o) -> o) ReprOptional