knit 0.2.0.0 → 0.3.0.0
raw patch · 3 files changed
+20/−9 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Generics.Eot: data Proxy (t :: k) :: forall k. () => k -> Type
+ Generics.Eot: data Proxy (t :: k)
- Generics.Eot: Named :: field -> Named field
+ Generics.Eot: Named :: field -> Named (a :: Symbol) field
- Generics.Eot: Proxy :: Proxy
+ Generics.Eot: Proxy :: Proxy (t :: k)
- Generics.Eot: absurd :: () => Void -> a
+ Generics.Eot: absurd :: Void -> a
- Generics.Eot.Eot: Named :: field -> Named field
+ Generics.Eot.Eot: Named :: field -> Named (a :: Symbol) field
Files
- knit.cabal +1/−1
- src/Knit.hs +12/−3
- test/Example.hs +7/−5
knit.cabal view
@@ -7,7 +7,7 @@ -- hash: 9a018114683474c6cf3790641de1ab1452d949f9accab039ef8c9c01bc3dcf91 name: knit-version: 0.2.0.0+version: 0.3.0.0 synopsis: Ties the knot on data structures that reference each other by unique keys. description: Please see the README on GitHub at <https://github.com/pkamenarsky/knit#readme> category: Data Structures
src/Knit.hs view
@@ -237,9 +237,15 @@ gGatherTableIds (Right u) = gGatherTableIds u instance ( GGatherTableIds ts- , KnitRecord tables r , KnownSymbol table- ) => GGatherTableIds (Named table [r tables 'Unresolved], ts) where+ ) => GGatherTableIds (Named table a, ts) where+ gGatherTableIds (_, ts) = gGatherTableIds ts++instance {-# OVERLAPPING #-}+ ( GGatherTableIds ts+ , KnitRecord tables r+ , KnownSymbol table+ ) => GGatherTableIds (Named table [r tables 'Unresolved], ts) where gGatherTableIds (Named records, ts) = (table, eids):gGatherTableIds ts where table = symbolVal (Proxy :: Proxy table)@@ -349,6 +355,9 @@ gResolveTables notRemoved rsvMap (Left u) = Left $ gResolveTables notRemoved rsvMap u gResolveTables _ _ _ = undefined +instance GResolveTables us ts => GResolveTables (Named table a, us) (Named table a, ts) where+ gResolveTables nr rsvMap (a, us) = (a, gResolveTables nr rsvMap us)+ instance ( GResolveTables us ts , KnitRecord tables t @@ -528,7 +537,7 @@ LookupTableType name (Either records Eot.Void) = LookupTableType name records LookupTableType name (Eot.Named name [record tables recordMode], records) = '(record, ExpandRecord name (Eot (record tables 'Done)))- LookupTableType name (Eot.Named otherName [record tables recordMode], records)+ LookupTableType name (Eot.Named otherName a, records) = LookupTableType name records LookupTableType name eot = TypeError ('Text "Can't lookup table type")
test/Example.hs view
@@ -22,7 +22,8 @@ deriving instance Show (Person Model Resolved) data Model m = Model- { persons :: Table Model m Person+ { version :: String+ , persons :: Table Model m Person } deriving (Generic, KnitTables) deriving instance Show (Model Resolved)@@ -30,9 +31,10 @@ -------------------------------------------------------------------------------- model :: Model Unresolved-model = Model+model = Model "" [ Person (Id "Alice") [ ForeignId "Bob", ForeignId "cat" ] , Person (Id "Bob") [ ForeignId "Alice" ]+ , Person (Remove "Bob2") [ ForeignId "Alice" ] -- You may disagree, but the cat thinks of itself as Person , Person (Id "cat") [ ForeignId "cat" ]@@ -44,7 +46,7 @@ Left e -> error (show e) manualModel :: Model Resolved-manualModel = Model+manualModel = Model "" [ alice , bob , cat@@ -57,7 +59,7 @@ -------------------------------------------------------------------------------- model2 :: Model Unresolved-model2 = Model+model2 = Model "" [ Person (Remove "Alice") [ ForeignId "Bob", ForeignId "cat" ] , Person (Id "Bob") [ ForeignId "Alice" ] @@ -71,7 +73,7 @@ Left e -> error (show e) manualModel2 :: Model Resolved-manualModel2 = Model+manualModel2 = Model "" [ cat ] where