@@ -70,7 +70,10 @@ class Migratable (revisions :: [(Revision, Schema)]) where
70 -> J.Value
70 -> J.Value
71 -> ParseResult (JsonRepr (Snd (Head revisions)))
71 -> ParseResult (JsonRepr (Snd (Head revisions)))
73−instance {-# OVERLAPPING #-} (TopLevel (Snd rev), SingI (Snd rev)) => Migratable '[rev] where
75+ ( TopLevel (Snd rev), SingI (Snd rev) )
76+ => Migratable '[rev] where
74 mparse _ = parseAndValidateJson
77 mparse _ = parseAndValidateJson
76instance {-# OVERLAPPABLE #-}
79instance {-# OVERLAPPABLE #-}
@@ -79,41 +82,16 @@ instance {-# OVERLAPPABLE #-}
79 , SingI (Snd (Head revisions)))
82 , SingI (Snd (Head revisions)))
80 => Migratable revisions where
83 => Migratable revisions where
81 mparse s v = case parseEither parseJSON v of
84 mparse s v = case parseEither parseJSON v of
82− Left _ -> migrate <$> mparse (sTail s) v
86+ migrate <$> (mparse (sTail s) v :: ParseResult (JsonRepr (Snd (Head (Tail revisions)))))
83 Right x -> Valid x
87 Right x -> Valid x
84−-- type family Migratable (revisions :: [(Revision, Schema)]) = (cs :: Constraint) where
85−-- Migratable '[rev] = (TopLevel (Snd rev), SingI (Snd rev))
86−-- Migratable revisions =
87−-- ( Migratable (Tail revisions)
88−-- , MigrateSchema (Snd (Head (Tail revisions))) (Snd (Head revisions))
89−-- , SingI (Snd (Head revisions)))
94−-- -> ParseResult (JsonRepr (Snd (Head revisions)))
95−-- mparseBySing s v = undefined
98−-- :: Migratable revisions
101−-- -> ParseResult (JsonRepr (Snd (Head revisions)))
105−-- sth = sSnd $ sHead st
106−-- SCons x SNil -> parseAndValidateJson v
107−-- SCons sch _ -> case parseEither parseJSON v of
108−-- Left _ -> migrate <$> mparse (sTail s) v
109−-- Right x -> Valid x
111parseAndValidateVersionedJson
89parseAndValidateVersionedJson
112− :: forall proxy v. (SingI (AllVersions v), Migratable (AllVersions v))
90+ :: forall proxy v. (SingI (Reverse (AllVersions v)), Migratable (Reverse (AllVersions v)))
113 => proxy v
91 => proxy v
114 -> J.Value
92 -> J.Value
115− -> ParseResult (JsonRepr (Snd (Head (AllVersions v))))
93+ -> ParseResult (JsonRepr (Snd (Head (Reverse (AllVersions v)))))
116−parseAndValidateVersionedJson _ v = mparse (sing :: Sing (AllVersions v)) v
94+parseAndValidateVersionedJson _ v = mparse (sing :: Sing (Reverse (AllVersions v))) v
118decodeAndValidateJson
96decodeAndValidateJson
119 :: forall schema
97 :: forall schema
@@ -125,10 +103,10 @@ decodeAndValidateJson bs = case decode bs of
125 Just x -> parseAndValidateJson x
103 Just x -> parseAndValidateJson x
127decodeAndValidateVersionedJson
105decodeAndValidateVersionedJson
128− :: (Migratable (AllVersions versioned), SingI (AllVersions versioned))
106+ :: (Migratable (Reverse (AllVersions versioned)), SingI (Reverse (AllVersions versioned)))
129 => proxy versioned
107 => proxy versioned
130 -> BL.ByteString
108 -> BL.ByteString
131− -> ParseResult (JsonRepr (Snd (Head (AllVersions versioned))))
109+ -> ParseResult (JsonRepr (Snd (Head (Reverse (AllVersions versioned)))))
132decodeAndValidateVersionedJson vp bs = case decode bs of
110decodeAndValidateVersionedJson vp bs = case decode bs of
133 Nothing -> DecodingError "malformed json"
111 Nothing -> DecodingError "malformed json"
134 Just x -> parseAndValidateVersionedJson vp x
112 Just x -> parseAndValidateVersionedJson vp x