superrecord 0.5.0.0 → 0.5.0.1
raw patch · 3 files changed
+14/−5 lines, 3 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
- SuperRecord: (&) :: forall l t lts s sortedLts. (RecSize lts ~ s, sortedLts ~ Sort ((l := t) : lts), KnownNat s, KnownNat (RecVecIdxPos l sortedLts), KeyDoesNotExist l lts, RecCopy lts lts sortedLts) => l := t -> Rec lts -> Rec sortedLts
+ SuperRecord: (&) :: forall l t lts s sortedLts. (RecSize lts ~ s, sortedLts ~ Sort (l := t : lts), KnownNat s, KnownNat (RecVecIdxPos l sortedLts), KeyDoesNotExist l lts, RecCopy lts lts sortedLts) => l := t -> Rec lts -> Rec sortedLts
- SuperRecord: rcons :: forall l t lts s sortedLts. (RecSize lts ~ s, sortedLts ~ Sort ((l := t) : lts), KnownNat s, KnownNat (RecVecIdxPos l sortedLts), KeyDoesNotExist l lts, RecCopy lts lts sortedLts) => l := t -> Rec lts -> Rec sortedLts
+ SuperRecord: rcons :: forall l t lts s sortedLts. (RecSize lts ~ s, sortedLts ~ Sort (l := t : lts), KnownNat s, KnownNat (RecVecIdxPos l sortedLts), KeyDoesNotExist l lts, RecCopy lts lts sortedLts) => l := t -> Rec lts -> Rec sortedLts
Files
- CHANGELOG.md +4/−0
- src/SuperRecord/Sort.hs +9/−4
- superrecord.cabal +1/−1
CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.5.0.1++* GHC 8.6 pre-release compatibility (h/t @galenhuntington)+ # 0.5.0.0 * Added variant types
src/SuperRecord/Sort.hs view
@@ -3,6 +3,10 @@ {-# LANGUAGE TypeOperators #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE CPP #-}+#if MIN_VERSION_base(4, 12, 0)+{-# LANGUAGE NoStarIsType #-}+#endif module SuperRecord.Sort ( FieldListSort )@@ -10,6 +14,7 @@ import SuperRecord.Field +import Data.Kind (Type) import Data.Proxy import GHC.TypeLits @@ -49,26 +54,26 @@ ListDrop xs 0 = xs ListDrop (x ': xs) n = ListDrop xs (n - 1) -type family FieldListMergeHelper (xs :: [*]) (ys :: [*]) (o :: Ordering) :: [*] where+type family FieldListMergeHelper (xs :: [Type]) (ys :: [Type]) (o :: Ordering) :: [Type] where FieldListMergeHelper (x := xv ': xs) (y := yv ': ys) 'GT = (y := yv) ': FieldListMerge (x := xv ': xs) ys FieldListMergeHelper (x := xv ': xs) (y := yv ': ys) leq = (x := xv) ': FieldListMerge xs (y := yv ': ys) -type family FieldListMerge (xs :: [*]) (ys :: [*]) :: [*] where+type family FieldListMerge (xs :: [Type]) (ys :: [Type]) :: [Type] where FieldListMerge xs '[] = xs FieldListMerge '[] ys = ys FieldListMerge (x := xv ': xs) (y := yv ': ys) = FieldListMergeHelper (x := xv ': xs) (y := yv ': ys) (CmpSymbol x y) -type family ListSortStep (xs :: [*]) (halfLen :: Nat) :: [*] where+type family ListSortStep (xs :: [Type]) (halfLen :: Nat) :: [Type] where ListSortStep xs halfLen = FieldListMerge (FieldListSort (ListTake xs halfLen)) (FieldListSort (ListDrop xs halfLen)) -- | Sort a list of fields using merge sort-type family FieldListSort (xs :: [*]) :: [*] where+type family FieldListSort (xs :: [Type]) :: [Type] where FieldListSort '[] = '[] FieldListSort '[x] = '[x] FieldListSort '[x, y] = FieldListMerge '[x] '[y] -- not needed, just an optimization
superrecord.cabal view
@@ -1,5 +1,5 @@ name: superrecord-version: 0.5.0.0+version: 0.5.0.1 synopsis: Supercharged anonymous records description: Anonymous records with various useful utilities homepage: https://github.com/agrafix/superrecord#readme