@@ -21,15 +21,13 @@ module Data.Schematic
21 , ParseResult(..)
21 , ParseResult(..)
22 , withRepr
22 , withRepr
27−import Control.Applicative
28import Control.Monad.Validation
26import Control.Monad.Validation
29import Data.Aeson as J
27import Data.Aeson as J
30import Data.Aeson.Types as J
28import Data.Aeson.Types as J
31import Data.ByteString.Lazy as BL
29import Data.ByteString.Lazy as BL
32−import Data.Functor.Identity
30+import Data.Functor.Identity as F
33import Data.Kind
31import Data.Kind
34import Data.Schematic.Helpers
32import Data.Schematic.Helpers
35import Data.Schematic.JsonSchema
33import Data.Schematic.JsonSchema
@@ -39,13 +37,14 @@ import Data.Schematic.Schema
39import Data.Schematic.Utils
37import Data.Schematic.Utils
40import Data.Schematic.Validation
38import Data.Schematic.Validation
41import Data.Scientific
39import Data.Scientific
42−import Data.Singletons.Prelude
40+import Data.Singletons.Prelude hiding ((:.))
43import Data.Singletons.TypeLits
41import Data.Singletons.TypeLits
44import Data.Tagged
42import Data.Tagged
45import Data.Text as T
43import Data.Text as T
46import Data.Union
44import Data.Union
47import qualified Data.Vector as V
45import qualified Data.Vector as V
48−import Data.Vinyl
46+import Data.Vinyl as V
47+import Data.Vinyl.Functor
51parseAndValidateJson
50parseAndValidateJson
@@ -131,7 +130,7 @@ decodeAndValidateVersionedWithMList _ mlist bs = case decode bs of
132decodeAndValidateVersionedWithPureMList
131decodeAndValidateVersionedWithPureMList
133 :: proxy versioned
132 :: proxy versioned
134− -> MList Identity (MapSnd (AllVersions versioned))
133+ -> MList F.Identity (MapSnd (AllVersions versioned))
135 -> BL.ByteString
134 -> BL.ByteString
136 -> ParseResult (JsonRepr (Head (MapSnd (AllVersions versioned))))
135 -> ParseResult (JsonRepr (Head (MapSnd (AllVersions versioned))))
137decodeAndValidateVersionedWithPureMList a b c =
136decodeAndValidateVersionedWithPureMList a b c =
@@ -141,20 +140,11 @@ decodeAndValidateVersionedWithPureMList a b c =
142type Constructor a
141type Constructor a
143 = forall b. FSubset (FieldsOf a) b (FImage (FieldsOf a) b)
142 = forall b. FSubset (FieldsOf a) b (FImage (FieldsOf a) b)
144− => Tagged (FieldsOf a) (Rec FieldRepr b)
143+ => Rec (Tagged (FieldsOf a) :. FieldRepr) b
145 -> JsonRepr ('SchemaObject (FieldsOf a))
144 -> JsonRepr ('SchemaObject (FieldsOf a))
147withRepr :: Constructor a
146withRepr :: Constructor a
148−withRepr = ReprObject . unTagged . fmap fcast
147+withRepr = ReprObject . rmap (unTagged . getCompose) . fcast
152− => m (FieldRepr fns)
153− -> m (Rec FieldRepr b)
154− -> m (Rec FieldRepr (fns ': b))
159class Representable s where
149class Representable s where
160 type Repr s :: Type
150 type Repr s :: Type
@@ -194,7 +184,7 @@ type family FieldsOf (s :: Schema) :: [(Symbol, Schema)] where
194type FieldConstructor fn =
184type FieldConstructor fn =
195 forall fs. (Representable (ByField fn fs (FIndex fn fs)))
185 forall fs. (Representable (ByField fn fs (FIndex fn fs)))
196 => Repr (ByField fn fs (FIndex fn fs))
186 => Repr (ByField fn fs (FIndex fn fs))
197− -> Tagged fs (FieldRepr '(fn, (ByField fn fs (FIndex fn fs))))
187+ -> (Tagged fs :. FieldRepr) '(fn, (ByField fn fs (FIndex fn fs)))
199field :: forall fn. KnownSymbol fn => FieldConstructor fn
189field :: forall fn. KnownSymbol fn => FieldConstructor fn
200−field = Tagged . construct (sing :: Sing fn) Proxy
190+field = Compose . Tagged . construct (sing :: Sing fn) Proxy