packages feed

superrecord 0.1.0.0 → 0.1.1.0

raw patch · 2 files changed

+27/−10 lines, 2 filesdep ~aesondep ~basedep ~deepseqPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: aeson, base, deepseq, ghc-prim, text

API changes (from Hackage documentation)

- SuperRecord: instance (GHC.TypeLits.KnownSymbol l, Data.Aeson.Types.FromJSON.FromJSON t, SuperRecord.RecJsonParse lts, SuperRecord.RecSize lts ~ s, GHC.TypeLits.KnownNat s) => SuperRecord.RecJsonParse (l SuperRecord.:= t : lts)
+ SuperRecord: instance (GHC.TypeLits.KnownSymbol l, Data.Aeson.Types.FromJSON.FromJSON t, SuperRecord.RecJsonParse lts, SuperRecord.RecSize lts ~ s, GHC.TypeLits.KnownNat s, SuperRecord.KeyDoesNotExist l lts) => SuperRecord.RecJsonParse (l SuperRecord.:= t : lts)
- SuperRecord: (&) :: forall l t lts s. (RecSize lts ~ s, KnownNat s) => l := t -> Rec lts -> Rec ((l := t) : lts)
+ SuperRecord: (&) :: forall l t lts s. (RecSize lts ~ s, KnownNat s, KeyDoesNotExist l lts) => l := t -> Rec lts -> Rec ((l := t) : lts)
- SuperRecord: rcons :: forall l t lts s. (RecSize lts ~ s, KnownNat s) => l := t -> Rec lts -> Rec ((l := t) : lts)
+ SuperRecord: rcons :: forall l t lts s. (RecSize lts ~ s, KnownNat s, KeyDoesNotExist l lts) => l := t -> Rec lts -> Rec ((l := t) : lts)

Files

src/SuperRecord.hs view
@@ -34,6 +34,7 @@     , RecNfData(..)     , RecSize, RemoveAccessTo     , FldProxy(..), RecDeepTy+    , KeyDoesNotExist     ) where @@ -114,7 +115,10 @@ {-# INLINE unsafeRnil #-}  -- | Prepend a record entry to a record 'Rec'-rcons :: forall l t lts s. (RecSize lts ~ s, KnownNat s) => l := t -> Rec lts -> Rec (l := t ': lts)+rcons ::+    forall l t lts s.+    (RecSize lts ~ s, KnownNat s, KeyDoesNotExist l lts)+    => l := t -> Rec lts -> Rec (l := t ': lts) rcons (_ := val) (Rec vec) =     Rec $     unsafePerformIO $!@@ -130,7 +134,9 @@ -- 'unsafeRnil' and still has enough free slots, mutates the original 'Rec' which should -- not be reused after unsafeRCons ::-    forall l t lts s. (RecSize lts ~ s, KnownNat s) => l := t -> Rec lts -> Rec (l := t ': lts)+    forall l t lts s.+    (RecSize lts ~ s, KnownNat s, KeyDoesNotExist l lts)+    => l := t -> Rec lts -> Rec (l := t ': lts) unsafeRCons (_ := val) (Rec vec) =     Rec $     unsafePerformIO $!@@ -142,12 +148,23 @@ {-# INLINE unsafeRCons #-}  -- | Alias for 'rcons'-(&) :: forall l t lts s. (RecSize lts ~ s, KnownNat s) => l := t -> Rec lts -> Rec (l := t ': lts)+(&) ::+    forall l t lts s.+    (RecSize lts ~ s, KnownNat s, KeyDoesNotExist l lts)+    => l := t -> Rec lts -> Rec (l := t ': lts) (&) = rcons {-# INLINE (&) #-}  infixr 5 & +type family KeyDoesNotExist (l :: Symbol) (lts :: [*]) :: Constraint where+    KeyDoesNotExist l '[] = 'True ~ 'True+    KeyDoesNotExist l (l := t ': lts) =+        TypeError+        ( 'Text "Duplicate key " ':<>: 'Text l+        )+    KeyDoesNotExist q (l := t ': lts) = KeyDoesNotExist q lts+ type family RecSize (lts :: [*]) :: Nat where     RecSize '[] = 0     RecSize (l := t ': lts) = 1 + RecSize lts@@ -357,7 +374,7 @@  instance     ( KnownSymbol l, FromJSON t, RecJsonParse lts-    , RecSize lts ~ s, KnownNat s+    , RecSize lts ~ s, KnownNat s, KeyDoesNotExist l lts     ) => RecJsonParse (l := t ': lts) where     recJsonParse initSize obj =         do let lbl :: FldProxy l
superrecord.cabal view
@@ -1,5 +1,5 @@ name:                superrecord-version:             0.1.0.0+version:             0.1.1.0 synopsis:            Supercharged anonymous records description:         Anonymous records with various useful utilities homepage:            https://github.com/agrafix/superrecord#readme@@ -16,13 +16,13 @@ library   hs-source-dirs:      src   exposed-modules:     SuperRecord-  build-depends:       base >= 4.7 && < 5+  build-depends:       base >= 4.9 && < 5                      , primitive >= 0.6                      , constraints-                     , aeson-                     , text-                     , deepseq-                     , ghc-prim+                     , aeson >= 1.0+                     , text >= 1.2+                     , deepseq >= 1.4+                     , ghc-prim >= 0.5   default-language:    Haskell2010   ghc-options:         -Wall -O2