@@ -1,5 +1,6 @@
1{-# LANGUAGE AllowAmbiguousTypes #-}
1{-# LANGUAGE AllowAmbiguousTypes #-}
2−{-# LANGUAGE TemplateHaskell #-}
3+{-# LANGUAGE TemplateHaskell #-}
4module Data.Schematic.Migration where
5module Data.Schematic.Migration where
@@ -8,7 +9,7 @@ import Data.Schematic.DSL
8import Data.Schematic.Lens
9import Data.Schematic.Lens
9import Data.Schematic.Path
10import Data.Schematic.Path
10import Data.Schematic.Schema
11import Data.Schematic.Schema
11−import Data.Singletons.Prelude hiding (All, (:.))
12+import Data.Singletons.Prelude hiding ((:.), All)
12import Data.Singletons.TypeLits
13import Data.Singletons.TypeLits
13import Data.Tagged
14import Data.Tagged
14import Data.Vinyl
15import Data.Vinyl
@@ -156,10 +157,17 @@ data MList :: (Type -> Type) -> [Schema] -> Type where
157infixr 7 :&&
158infixr 7 :&&
160+#if MIN_VERSION_base(4,12,0)
162+ :: forall m fs fh. (FSubset fs fs (FImage fs fs), Monad m, RMap fh, RMap fs)
163+ => (Rec (Tagged fs :. FieldRepr) fh -> m (Rec (Tagged fs :. FieldRepr) fs))
164+ -> Tagged ('SchemaObject fs) (JsonRepr ('SchemaObject fh) -> m (JsonRepr ('SchemaObject fs)))
159migrateObject
166migrateObject
160 :: forall m fs fh. (FSubset fs fs (FImage fs fs), Monad m)
167 :: forall m fs fh. (FSubset fs fs (FImage fs fs), Monad m)
161 => (Rec (Tagged fs :. FieldRepr) fh -> m (Rec (Tagged fs :. FieldRepr) fs))
168 => (Rec (Tagged fs :. FieldRepr) fh -> m (Rec (Tagged fs :. FieldRepr) fs))
162 -> Tagged ('SchemaObject fs) (JsonRepr ('SchemaObject fh) -> m (JsonRepr ('SchemaObject fs)))
169 -> Tagged ('SchemaObject fs) (JsonRepr ('SchemaObject fh) -> m (JsonRepr ('SchemaObject fs)))
163migrateObject f = Tagged $ \(ReprObject r) -> do
171migrateObject f = Tagged $ \(ReprObject r) -> do
164 res <- f $ rmap (Compose . Tagged) r
172 res <- f $ rmap (Compose . Tagged) r
165 pure $ withRepr @('SchemaObject fs) res
173 pure $ withRepr @('SchemaObject fs) res