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 +21/−4
- superrecord.cabal +6/−6
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