HList 0.5.3.0 → 0.5.4.0
raw patch · 17 files changed
+116/−55 lines, 17 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
- Data.HList: data ErrorMessage
+ Data.HList: data () => ErrorMessage
- Data.HList: data KProxy t
+ Data.HList: data () => KProxy t
- Data.HList: data Proxy (t :: k)
+ Data.HList: data () => Proxy (t :: k)
- Data.HList: dredge' :: forall {k1} {k2} {s} {ns :: [[Type]]} {xs :: [Type]} {p} {a} {f :: Type -> k1} {vs :: [Type]} {ns1 :: [[Type]]} {vs1 :: [Type]} {l :: k2} {ns2 :: [[Type]]} {x}. (MapFieldTree (TryCollectionListTF s) ns, LabelablePath xs (p a (f a)) (p s (f s)), SameLength' ns vs, SameLength' ns1 vs1, SameLength' vs ns, SameLength' vs1 ns1, MapFieldTreeVal s (TryCollectionListTF s) vs, FilterLastEq (Label l) ns ns ns1, FilterLastEq (Label l) ns vs vs1, FilterVEq1 a vs1 ns1 ns2, HGuardNonNull (NamesDontMatch s ns l) ns1, HSingleton (NonUnique s a l) (TypesDontMatch s ns1 vs1 a) ns2 xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
+ Data.HList: dredge' :: forall {k2} {k} {s} {ns :: [[Type]]} {xs :: [Type]} {p} {a} {f :: Type -> k2} {vs :: [Type]} {ns1 :: [[Type]]} {vs1 :: [Type]} {l :: k} {ns2 :: [[Type]]} {x}. (MapFieldTree (TryCollectionListTF s) ns, LabelablePath xs (p a (f a)) (p s (f s)), SameLength' ns vs, SameLength' ns1 vs1, SameLength' vs ns, SameLength' vs1 ns1, MapFieldTreeVal s (TryCollectionListTF s) vs, FilterLastEq (Label l) ns ns ns1, FilterLastEq (Label l) ns vs vs1, FilterVEq1 a vs1 ns1 ns2, HGuardNonNull (NamesDontMatch s ns l) ns1, HSingleton (NonUnique s a l) (TypesDontMatch s ns1 vs1 a) ns2 xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
- Data.HList: dredgeND' :: forall {k1} {k2} {xs :: [Type]} {p} {a} {f :: Type -> k1} {s} {ns :: [[Type]]} {l :: k2} {ns' :: [[Type]]} {x}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label l) ns ns ns', HSingleton (NonUnique' s l) (NamesDontMatch s ns l) ns' xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
+ Data.HList: dredgeND' :: forall {k2} {k} {xs :: [Type]} {p} {a} {f :: Type -> k2} {s} {ns :: [[Type]]} {l :: k} {ns' :: [[Type]]} {x}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label l) ns ns ns', HSingleton (NonUnique' s l) (NamesDontMatch s ns l) ns' xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
- Data.HList: dredgeTI' :: forall {k} {xs :: [Type]} {p} {a} {f :: Type -> k} {s} {ns :: [[Type]]} {ns' :: [[Type]]} {q}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label a) ns ns ns', HSingleton (NonUnique' s a) (NamesDontMatch s ns a) ns' xs) => q a -> p a (f a) -> p s (f s)
+ Data.HList: dredgeTI' :: forall {k2} {xs :: [Type]} {p} {a} {f :: Type -> k2} {s} {ns :: [[Type]]} {ns' :: [[Type]]} {q}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label a) ns ns ns', HSingleton (NonUnique' s a) (NamesDontMatch s ns a) ns' xs) => q a -> p a (f a) -> p s (f s)
- Data.HList: extendVariant :: Variant l -> Variant (e : l)
+ Data.HList: extendVariant :: Variant l -> Variant (e ': l)
- Data.HList: hHead :: HList (e : l) -> e
+ Data.HList: hHead :: HList (e ': l) -> e
- Data.HList: hLast :: forall {l1 :: [Type]} {e} {l :: [Type]}. HRevApp l1 ('[] :: [Type]) (e : l) => HList l1 -> e
+ Data.HList: hLast :: forall {l1 :: [Type]} {e} {l :: [Type]}. HRevApp l1 ('[] :: [Type]) (e ': l) => HList l1 -> e
- Data.HList: hOccursFst :: forall e l l'. HOccurrence e l (e : l') => HList l -> e
+ Data.HList: hOccursFst :: forall e l l'. HOccurrence e l (e ': l') => HList l -> e
- Data.HList: hOccursMany1 :: forall e l l'. (HOccurrence e l (e : l'), HOccursMany e l') => HList l -> (e, [e])
+ Data.HList: hOccursMany1 :: forall e l l'. (HOccurrence e l (e ': l'), HOccursMany e l') => HList l -> (e, [e])
- Data.HList: hTail :: HList (e : l) -> HList l
+ Data.HList: hTail :: HList (e ': l) -> HList l
- Data.HList: hTranspose :: forall {a :: [Type]} {b :: [Type]} {c :: [Type]} {es :: [Type]} {l :: [Type]} {n :: HNat}. (HZip3 a b c, HFoldr HZipF (HList es) l (HList b), HReplicateFD n (HList ('[] :: [Type])) es, SameLength' (HReplicateR n ()) a, HLengthEq1 a n, HLengthEq2 a n) => HList (HList a : l) -> HList c
+ Data.HList: hTranspose :: forall {a :: [Type]} {b :: [Type]} {c :: [Type]} {es :: [Type]} {l :: [Type]} {n :: HNat}. (HZip3 a b c, HFoldr HZipF (HList es) l (HList b), HReplicateFD n (HList ('[] :: [Type])) es, SameLength' (HReplicateR n ()) a, HLengthEq1 a n, HLengthEq2 a n) => HList (HList a ': l) -> HList c
- Data.HList: infixr 4 .==.
+ Data.HList: infixr 4 .=.
- Data.HList: kw :: Kw fn arg_def r => HList (fn : arg_def) -> r
+ Data.HList: kw :: Kw fn arg_def r => HList (fn ': arg_def) -> r
- Data.HList: mkTIC :: forall {i} {l :: [Type]} {n :: HNat}. (HFind1 i (UnLabel i (LabelsOf l)) (UnLabel i (LabelsOf l)) n, HasField i (Record l) i, HAllTaggedLV l, HLabelSet (LabelsOf l), HAllTaggedEq l, KnownNat (HNat2Nat n)) => i -> TIC l
+ Data.HList: mkTIC :: forall {i} {l :: [Type]} {n :: HNat}. (HasField i (Record l) i, HAllTaggedLV l, HLabelSet (LabelsOf l), HAllTaggedEq l, KnownNat (HNat2Nat n), HFind1 i (UnLabel i (LabelsOf l)) (UnLabel i (LabelsOf l)) n) => i -> TIC l
- Data.HList: newtype Tagged (s :: k) b
+ Data.HList: newtype () => Tagged (s :: k) b
- Data.HList: relabeled' :: forall {t :: [Type]} {b :: [Type]} {r} {p} {f}. (RecordValuesR t ~ RecordValuesR b, Relabeled r, HMapAux HList TaggedFn (RecordValuesR t) b, HMapAux HList TaggedFn (RecordValuesR b) t, RecordValues b, RecordValues t, SameLength' t b, SameLength' t (RecordValuesR b), SameLength' b t, SameLength' b (RecordValuesR t), SameLength' (RecordValuesR t) b, SameLength' (RecordValuesR b) t, Profunctor p, Functor f) => p (r b) (f (r b)) -> p (r t) (f (r t))
+ Data.HList: relabeled' :: forall {t :: [Type]} {b :: [Type]} {r} {p} {f}. (RecordValuesR t ~ RecordValuesR b, Relabeled r, HMapAux HList TaggedFn (RecordValuesR b) b, HMapAux HList TaggedFn (RecordValuesR b) t, SameLength' t b, SameLength' t (RecordValuesR b), SameLength' b t, SameLength' (RecordValuesR b) t, RecordValues b, RecordValues t, Profunctor p, Functor f) => p (r b) (f (r b)) -> p (r t) (f (r t))
- Data.HList: splitVariant1 :: Variant (Tagged s x : xs) -> Either x (Variant xs)
+ Data.HList: splitVariant1 :: Variant (Tagged s x ': xs) -> Either x (Variant xs)
- Data.HList: splitVariant1' :: Variant (x : xs) -> Either x (Variant xs)
+ Data.HList: splitVariant1' :: Variant (x ': xs) -> Either x (Variant xs)
- Data.HList: tipyLens :: forall {n :: HNat} {x} {xs1 :: [Type]} {l1 :: [Type]} {a1} {xs2 :: [Type]} {b :: Bool} {a2} {f}. (HSplitAt1 ('[] :: [Type]) n (Tagged x x : xs1) l1 (Tagged a1 a1 : xs2), HAppendList1 l1 (Tagged a1 a1 : xs2) (Tagged x x : xs1), SameLength' (HReplicateR n ()) l1, HLengthEq1 l1 n, HLengthEq2 l1 n, HEq (Label a1) (Label x) b, HFind2 b (Label a1) (LabelsOf xs1) (Label x : LabelsOf xs1) n, HAllTaggedEq (HAppendListR l1 (Tagged a2 a2 : xs2)), HLabelSet (LabelsOf (HAppendListR l1 (Tagged a2 a2 : xs2))), HAllTaggedLV (HAppendListR l1 (Tagged a2 a2 : xs2)), HAppendList l1 (Tagged a2 a2 : xs2), Functor f) => (a1 -> f a2) -> TIP (Tagged x x : xs1) -> f (TIP (HAppendListR l1 (Tagged a2 a2 : xs2)))
+ Data.HList: tipyLens :: forall {n :: HNat} {x} {xs1 :: [Type]} {l1 :: [Type]} {a1} {xs2 :: [Type]} {b :: Bool} {a2} {f}. (HSplitAt1 ('[] :: [Type]) n (Tagged x x ': xs1) l1 (Tagged a1 a1 ': xs2), HAppendList1 l1 (Tagged a1 a1 ': xs2) (Tagged x x ': xs1), SameLength' (HReplicateR n ()) l1, HLengthEq1 l1 n, HLengthEq2 l1 n, HEq (Label a1) (Label x) b, HFind2 b (Label a1) (LabelsOf xs1) (Label x ': LabelsOf xs1) n, HAllTaggedEq (HAppendListR l1 (Tagged a2 a2 ': xs2)), HLabelSet (LabelsOf (HAppendListR l1 (Tagged a2 a2 ': xs2))), HAllTaggedLV (HAppendListR l1 (Tagged a2 a2 ': xs2)), HAppendList l1 (Tagged a2 a2 ': xs2), Functor f) => (a1 -> f a2) -> TIP (Tagged x x ': xs1) -> f (TIP (HAppendListR l1 (Tagged a2 a2 ': xs2)))
- Data.HList: type family GetElemTy (x :: [*]) :: *
+ Data.HList: type family KMember (n :: HNat) (ns :: [HNat]) :: Bool
- Data.HList: typeIndexed' :: forall {t :: [Type]} {r} {tr} {p} {f}. (Coercible (TagR (RecordValuesR t)) t, TypeIndexed r tr, HMapAux HList TaggedFn (RecordValuesR t) t, RecordValues t, SameLabels t t, HAllTaggedLV t, HLabelSet (LabelsOf t), TagUntagFD (RecordValuesR t) (TagR (RecordValuesR t)), Profunctor p, Functor f, SameLength' t t, SameLength' (RecordValuesR t) (RecordValuesR t)) => p (tr (TagR (RecordValuesR t))) (f (tr (TagR (RecordValuesR t)))) -> p (r t) (f (r t))
+ Data.HList: typeIndexed' :: forall {t :: [Type]} {r} {tr} {p} {f}. (Coercible (TagR (RecordValuesR t)) t, SameLabels t t, RecordValues t, HMapAux HList TaggedFn (RecordValuesR t) t, TypeIndexed r tr, HAllTaggedLV t, HLabelSet (LabelsOf t), TagUntagFD (RecordValuesR t) (TagR (RecordValuesR t)), Profunctor p, Functor f, SameLength' t t, SameLength' (RecordValuesR t) (RecordValuesR t)) => p (tr (TagR (RecordValuesR t))) (f (tr (TagR (RecordValuesR t)))) -> p (r t) (f (r t))
- Data.HList: unboxedS :: forall {g1 :: [Type]} {u1 :: [Type]} {g2 :: [Type]} {u2 :: [Type]} {x1 :: [Type]} {x2 :: [Type]} {p} {f}. (HMapUnboxF g1 u1, HMapUnboxF g2 u2, HGroupBy EqTagValue x1 g1, HGroupBy EqTagValue x2 g2, Profunctor p, Functor f, HConcatFD g1 x1, SameLength' u2 g2, SameLength' g2 u2, SameLength' u1 g1, SameLength' g1 u1, HMapAux HList UnboxF g2 u2, HMapAux HList BoxF u1 g1) => p (RecordUS x2) (f (RecordUS x1)) -> p (Record x2) (f (Record x1))
+ Data.HList: unboxedS :: forall {x1 :: [Type]} {g1 :: [Type]} {x2 :: [Type]} {g2 :: [Type]} {p} {f} {u1 :: [Type]} {u2 :: [Type]}. (HGroupBy EqTagValue x1 g1, HGroupBy EqTagValue x2 g2, Profunctor p, Functor f, HConcatFD g1 x1, SameLength' u1 g2, SameLength' g2 u1, SameLength' u2 g1, SameLength' g1 u2, HMapAux HList UnboxF g2 u1, HMapAux HList BoxF u2 g1, HMapUnboxF g2 u1, HMapUnboxF g1 u2) => p (RecordUS x2) (f (RecordUS x1)) -> p (Record x2) (f (Record x1))
- Data.HList: unboxedS' :: forall {g :: [Type]} {u :: [Type]} {x :: [Type]} {p} {f}. (HMapUnboxF g u, HGroupBy EqTagValue x g, Profunctor p, Functor f, HConcatFD g x, SameLength' u g, SameLength' g u, HMapAux HList UnboxF g u, HMapAux HList BoxF u g) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
+ Data.HList: unboxedS' :: forall {g :: [Type]} {x :: [Type]} {f} {p} {u :: [Type]}. (HConcatFD g x, Functor f, Profunctor p, HGroupBy EqTagValue x g, SameLength' u g, SameLength' g u, HMapAux HList BoxF u g, HMapAux HList UnboxF g u, HMapUnboxF g u) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
- Data.HList: unvarianted' :: forall {b :: Bool} {t :: [Type]} {a} {f}. (Unvariant1 b t a, HAllEqVal' (Tagged () a : t), HAllEqVal t b, HAllEqVal (Tagged () a : t) b, SameLabels t t, SameLength' t t, Functor f) => (a -> f a) -> Variant t -> f (Variant t)
+ Data.HList: unvarianted' :: forall {a} {t :: [Type]} {b :: Bool} {f}. (HAllEqVal' (Tagged () a ': t), Unvariant1 b t a, HAllEqVal t b, HAllEqVal (Tagged () a ': t) b, SameLabels t t, SameLength' t t, Functor f) => (a -> f a) -> Variant t -> f (Variant t)
- Data.HList.CommonMain: dredge' :: forall {k1} {k2} {s} {ns :: [[Type]]} {xs :: [Type]} {p} {a} {f :: Type -> k1} {vs :: [Type]} {ns1 :: [[Type]]} {vs1 :: [Type]} {l :: k2} {ns2 :: [[Type]]} {x}. (MapFieldTree (TryCollectionListTF s) ns, LabelablePath xs (p a (f a)) (p s (f s)), SameLength' ns vs, SameLength' ns1 vs1, SameLength' vs ns, SameLength' vs1 ns1, MapFieldTreeVal s (TryCollectionListTF s) vs, FilterLastEq (Label l) ns ns ns1, FilterLastEq (Label l) ns vs vs1, FilterVEq1 a vs1 ns1 ns2, HGuardNonNull (NamesDontMatch s ns l) ns1, HSingleton (NonUnique s a l) (TypesDontMatch s ns1 vs1 a) ns2 xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
+ Data.HList.CommonMain: dredge' :: forall {k2} {k} {s} {ns :: [[Type]]} {xs :: [Type]} {p} {a} {f :: Type -> k2} {vs :: [Type]} {ns1 :: [[Type]]} {vs1 :: [Type]} {l :: k} {ns2 :: [[Type]]} {x}. (MapFieldTree (TryCollectionListTF s) ns, LabelablePath xs (p a (f a)) (p s (f s)), SameLength' ns vs, SameLength' ns1 vs1, SameLength' vs ns, SameLength' vs1 ns1, MapFieldTreeVal s (TryCollectionListTF s) vs, FilterLastEq (Label l) ns ns ns1, FilterLastEq (Label l) ns vs vs1, FilterVEq1 a vs1 ns1 ns2, HGuardNonNull (NamesDontMatch s ns l) ns1, HSingleton (NonUnique s a l) (TypesDontMatch s ns1 vs1 a) ns2 xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
- Data.HList.CommonMain: dredgeND' :: forall {k1} {k2} {xs :: [Type]} {p} {a} {f :: Type -> k1} {s} {ns :: [[Type]]} {l :: k2} {ns' :: [[Type]]} {x}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label l) ns ns ns', HSingleton (NonUnique' s l) (NamesDontMatch s ns l) ns' xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
+ Data.HList.CommonMain: dredgeND' :: forall {k2} {k} {xs :: [Type]} {p} {a} {f :: Type -> k2} {s} {ns :: [[Type]]} {l :: k} {ns' :: [[Type]]} {x}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label l) ns ns ns', HSingleton (NonUnique' s l) (NamesDontMatch s ns l) ns' xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
- Data.HList.CommonMain: dredgeTI' :: forall {k} {xs :: [Type]} {p} {a} {f :: Type -> k} {s} {ns :: [[Type]]} {ns' :: [[Type]]} {q}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label a) ns ns ns', HSingleton (NonUnique' s a) (NamesDontMatch s ns a) ns' xs) => q a -> p a (f a) -> p s (f s)
+ Data.HList.CommonMain: dredgeTI' :: forall {k2} {xs :: [Type]} {p} {a} {f :: Type -> k2} {s} {ns :: [[Type]]} {ns' :: [[Type]]} {q}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label a) ns ns ns', HSingleton (NonUnique' s a) (NamesDontMatch s ns a) ns' xs) => q a -> p a (f a) -> p s (f s)
- Data.HList.CommonMain: extendVariant :: Variant l -> Variant (e : l)
+ Data.HList.CommonMain: extendVariant :: Variant l -> Variant (e ': l)
- Data.HList.CommonMain: hHead :: HList (e : l) -> e
+ Data.HList.CommonMain: hHead :: HList (e ': l) -> e
- Data.HList.CommonMain: hLast :: forall {l1 :: [Type]} {e} {l :: [Type]}. HRevApp l1 ('[] :: [Type]) (e : l) => HList l1 -> e
+ Data.HList.CommonMain: hLast :: forall {l1 :: [Type]} {e} {l :: [Type]}. HRevApp l1 ('[] :: [Type]) (e ': l) => HList l1 -> e
- Data.HList.CommonMain: hTail :: HList (e : l) -> HList l
+ Data.HList.CommonMain: hTail :: HList (e ': l) -> HList l
- Data.HList.CommonMain: kw :: Kw fn arg_def r => HList (fn : arg_def) -> r
+ Data.HList.CommonMain: kw :: Kw fn arg_def r => HList (fn ': arg_def) -> r
- Data.HList.CommonMain: mkTIC :: forall {i} {l :: [Type]} {n :: HNat}. (HFind1 i (UnLabel i (LabelsOf l)) (UnLabel i (LabelsOf l)) n, HasField i (Record l) i, HAllTaggedLV l, HLabelSet (LabelsOf l), HAllTaggedEq l, KnownNat (HNat2Nat n)) => i -> TIC l
+ Data.HList.CommonMain: mkTIC :: forall {i} {l :: [Type]} {n :: HNat}. (HasField i (Record l) i, HAllTaggedLV l, HLabelSet (LabelsOf l), HAllTaggedEq l, KnownNat (HNat2Nat n), HFind1 i (UnLabel i (LabelsOf l)) (UnLabel i (LabelsOf l)) n) => i -> TIC l
- Data.HList.CommonMain: splitVariant1 :: Variant (Tagged s x : xs) -> Either x (Variant xs)
+ Data.HList.CommonMain: splitVariant1 :: Variant (Tagged s x ': xs) -> Either x (Variant xs)
- Data.HList.CommonMain: splitVariant1' :: Variant (x : xs) -> Either x (Variant xs)
+ Data.HList.CommonMain: splitVariant1' :: Variant (x ': xs) -> Either x (Variant xs)
- Data.HList.CommonMain: tipyLens :: forall {n :: HNat} {x} {xs1 :: [Type]} {l1 :: [Type]} {a1} {xs2 :: [Type]} {b :: Bool} {a2} {f}. (HSplitAt1 ('[] :: [Type]) n (Tagged x x : xs1) l1 (Tagged a1 a1 : xs2), HAppendList1 l1 (Tagged a1 a1 : xs2) (Tagged x x : xs1), SameLength' (HReplicateR n ()) l1, HLengthEq1 l1 n, HLengthEq2 l1 n, HEq (Label a1) (Label x) b, HFind2 b (Label a1) (LabelsOf xs1) (Label x : LabelsOf xs1) n, HAllTaggedEq (HAppendListR l1 (Tagged a2 a2 : xs2)), HLabelSet (LabelsOf (HAppendListR l1 (Tagged a2 a2 : xs2))), HAllTaggedLV (HAppendListR l1 (Tagged a2 a2 : xs2)), HAppendList l1 (Tagged a2 a2 : xs2), Functor f) => (a1 -> f a2) -> TIP (Tagged x x : xs1) -> f (TIP (HAppendListR l1 (Tagged a2 a2 : xs2)))
+ Data.HList.CommonMain: tipyLens :: forall {n :: HNat} {x} {xs1 :: [Type]} {l1 :: [Type]} {a1} {xs2 :: [Type]} {b :: Bool} {a2} {f}. (HSplitAt1 ('[] :: [Type]) n (Tagged x x ': xs1) l1 (Tagged a1 a1 ': xs2), HAppendList1 l1 (Tagged a1 a1 ': xs2) (Tagged x x ': xs1), SameLength' (HReplicateR n ()) l1, HLengthEq1 l1 n, HLengthEq2 l1 n, HEq (Label a1) (Label x) b, HFind2 b (Label a1) (LabelsOf xs1) (Label x ': LabelsOf xs1) n, HAllTaggedEq (HAppendListR l1 (Tagged a2 a2 ': xs2)), HLabelSet (LabelsOf (HAppendListR l1 (Tagged a2 a2 ': xs2))), HAllTaggedLV (HAppendListR l1 (Tagged a2 a2 ': xs2)), HAppendList l1 (Tagged a2 a2 ': xs2), Functor f) => (a1 -> f a2) -> TIP (Tagged x x ': xs1) -> f (TIP (HAppendListR l1 (Tagged a2 a2 ': xs2)))
- Data.HList.CommonMain: typeIndexed' :: forall {t :: [Type]} {r} {tr} {p} {f}. (Coercible (TagR (RecordValuesR t)) t, TypeIndexed r tr, HMapAux HList TaggedFn (RecordValuesR t) t, RecordValues t, SameLabels t t, HAllTaggedLV t, HLabelSet (LabelsOf t), TagUntagFD (RecordValuesR t) (TagR (RecordValuesR t)), Profunctor p, Functor f, SameLength' t t, SameLength' (RecordValuesR t) (RecordValuesR t)) => p (tr (TagR (RecordValuesR t))) (f (tr (TagR (RecordValuesR t)))) -> p (r t) (f (r t))
+ Data.HList.CommonMain: typeIndexed' :: forall {t :: [Type]} {r} {tr} {p} {f}. (Coercible (TagR (RecordValuesR t)) t, SameLabels t t, RecordValues t, HMapAux HList TaggedFn (RecordValuesR t) t, TypeIndexed r tr, HAllTaggedLV t, HLabelSet (LabelsOf t), TagUntagFD (RecordValuesR t) (TagR (RecordValuesR t)), Profunctor p, Functor f, SameLength' t t, SameLength' (RecordValuesR t) (RecordValuesR t)) => p (tr (TagR (RecordValuesR t))) (f (tr (TagR (RecordValuesR t)))) -> p (r t) (f (r t))
- Data.HList.CommonMain: unboxedS :: forall {g1 :: [Type]} {u1 :: [Type]} {g2 :: [Type]} {u2 :: [Type]} {x1 :: [Type]} {x2 :: [Type]} {p} {f}. (HMapUnboxF g1 u1, HMapUnboxF g2 u2, HGroupBy EqTagValue x1 g1, HGroupBy EqTagValue x2 g2, Profunctor p, Functor f, HConcatFD g1 x1, SameLength' u2 g2, SameLength' g2 u2, SameLength' u1 g1, SameLength' g1 u1, HMapAux HList UnboxF g2 u2, HMapAux HList BoxF u1 g1) => p (RecordUS x2) (f (RecordUS x1)) -> p (Record x2) (f (Record x1))
+ Data.HList.CommonMain: unboxedS :: forall {x1 :: [Type]} {g1 :: [Type]} {x2 :: [Type]} {g2 :: [Type]} {p} {f} {u1 :: [Type]} {u2 :: [Type]}. (HGroupBy EqTagValue x1 g1, HGroupBy EqTagValue x2 g2, Profunctor p, Functor f, HConcatFD g1 x1, SameLength' u1 g2, SameLength' g2 u1, SameLength' u2 g1, SameLength' g1 u2, HMapAux HList UnboxF g2 u1, HMapAux HList BoxF u2 g1, HMapUnboxF g2 u1, HMapUnboxF g1 u2) => p (RecordUS x2) (f (RecordUS x1)) -> p (Record x2) (f (Record x1))
- Data.HList.CommonMain: unboxedS' :: forall {g :: [Type]} {u :: [Type]} {x :: [Type]} {p} {f}. (HMapUnboxF g u, HGroupBy EqTagValue x g, Profunctor p, Functor f, HConcatFD g x, SameLength' u g, SameLength' g u, HMapAux HList UnboxF g u, HMapAux HList BoxF u g) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
+ Data.HList.CommonMain: unboxedS' :: forall {g :: [Type]} {x :: [Type]} {f} {p} {u :: [Type]}. (HConcatFD g x, Functor f, Profunctor p, HGroupBy EqTagValue x g, SameLength' u g, SameLength' g u, HMapAux HList BoxF u g, HMapAux HList UnboxF g u, HMapUnboxF g u) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
- Data.HList.CommonMain: unvarianted' :: forall {b :: Bool} {t :: [Type]} {a} {f}. (Unvariant1 b t a, HAllEqVal' (Tagged () a : t), HAllEqVal t b, HAllEqVal (Tagged () a : t) b, SameLabels t t, SameLength' t t, Functor f) => (a -> f a) -> Variant t -> f (Variant t)
+ Data.HList.CommonMain: unvarianted' :: forall {a} {t :: [Type]} {b :: Bool} {f}. (HAllEqVal' (Tagged () a ': t), Unvariant1 b t a, HAllEqVal t b, HAllEqVal (Tagged () a ': t) b, SameLabels t t, SameLength' t t, Functor f) => (a -> f a) -> Variant t -> f (Variant t)
- Data.HList.Dredge: dredge' :: forall {k} {k} {s} {ns :: [[Type]]} {xs :: [Type]} {p} {a} {f :: Type -> k} {vs :: [Type]} {ns1 :: [[Type]]} {vs1 :: [Type]} {l :: k} {ns2 :: [[Type]]} {x}. (MapFieldTree (TryCollectionListTF s) ns, LabelablePath xs (p a (f a)) (p s (f s)), SameLength' ns vs, SameLength' ns1 vs1, SameLength' vs ns, SameLength' vs1 ns1, MapFieldTreeVal s (TryCollectionListTF s) vs, FilterLastEq (Label l) ns ns ns1, FilterLastEq (Label l) ns vs vs1, FilterVEq1 a vs1 ns1 ns2, HGuardNonNull (NamesDontMatch s ns l) ns1, HSingleton (NonUnique s a l) (TypesDontMatch s ns1 vs1 a) ns2 xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
+ Data.HList.Dredge: dredge' :: forall {k2} {k} {s} {ns :: [[Type]]} {xs :: [Type]} {p} {a} {f :: Type -> k2} {vs :: [Type]} {ns1 :: [[Type]]} {vs1 :: [Type]} {l :: k} {ns2 :: [[Type]]} {x}. (MapFieldTree (TryCollectionListTF s) ns, LabelablePath xs (p a (f a)) (p s (f s)), SameLength' ns vs, SameLength' ns1 vs1, SameLength' vs ns, SameLength' vs1 ns1, MapFieldTreeVal s (TryCollectionListTF s) vs, FilterLastEq (Label l) ns ns ns1, FilterLastEq (Label l) ns vs vs1, FilterVEq1 a vs1 ns1 ns2, HGuardNonNull (NamesDontMatch s ns l) ns1, HSingleton (NonUnique s a l) (TypesDontMatch s ns1 vs1 a) ns2 xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
- Data.HList.Dredge: dredgeND' :: forall {k} {k} {xs :: [Type]} {p} {a} {f :: Type -> k} {s} {ns :: [[Type]]} {l :: k} {ns' :: [[Type]]} {x}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label l) ns ns ns', HSingleton (NonUnique' s l) (NamesDontMatch s ns l) ns' xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
+ Data.HList.Dredge: dredgeND' :: forall {k2} {k} {xs :: [Type]} {p} {a} {f :: Type -> k2} {s} {ns :: [[Type]]} {l :: k} {ns' :: [[Type]]} {x}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label l) ns ns ns', HSingleton (NonUnique' s l) (NamesDontMatch s ns l) ns' xs, EnsureLabel x (Label l)) => x -> p a (f a) -> p s (f s)
- Data.HList.Dredge: dredgeTI' :: forall {k} {xs :: [Type]} {p} {a} {f :: Type -> k} {s} {ns :: [[Type]]} {ns' :: [[Type]]} {q}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label a) ns ns ns', HSingleton (NonUnique' s a) (NamesDontMatch s ns a) ns' xs) => q a -> p a (f a) -> p s (f s)
+ Data.HList.Dredge: dredgeTI' :: forall {k2} {xs :: [Type]} {p} {a} {f :: Type -> k2} {s} {ns :: [[Type]]} {ns' :: [[Type]]} {q}. (LabelablePath xs (p a (f a)) (p s (f s)), MapFieldTree (TryCollectionListTF s) ns, FilterLastEq (Label a) ns ns ns', HSingleton (NonUnique' s a) (NamesDontMatch s ns a) ns' xs) => q a -> p a (f a) -> p s (f s)
- Data.HList.FakePrelude: data ErrorMessage
+ Data.HList.FakePrelude: data () => ErrorMessage
- Data.HList.HList: hHead :: HList (e : l) -> e
+ Data.HList.HList: hHead :: HList (e ': l) -> e
- Data.HList.HList: hLast :: forall {l1 :: [Type]} {e} {l :: [Type]}. HRevApp l1 ('[] :: [Type]) (e : l) => HList l1 -> e
+ Data.HList.HList: hLast :: forall {l1 :: [Type]} {e} {l :: [Type]}. HRevApp l1 ('[] :: [Type]) (e ': l) => HList l1 -> e
- Data.HList.HList: hTail :: HList (e : l) -> HList l
+ Data.HList.HList: hTail :: HList (e ': l) -> HList l
- Data.HList.HOccurs: hOccursFst :: forall e l l'. HOccurrence e l (e : l') => HList l -> e
+ Data.HList.HOccurs: hOccursFst :: forall e l l'. HOccurrence e l (e ': l') => HList l -> e
- Data.HList.HOccurs: hOccursMany1 :: forall e l l'. (HOccurrence e l (e : l'), HOccursMany e l') => HList l -> (e, [e])
+ Data.HList.HOccurs: hOccursMany1 :: forall e l l'. (HOccurrence e l (e ': l'), HOccursMany e l') => HList l -> (e, [e])
- Data.HList.HZip: hTranspose :: forall {a :: [Type]} {b :: [Type]} {c :: [Type]} {es :: [Type]} {l :: [Type]} {n :: HNat}. (HZip3 a b c, HFoldr HZipF (HList es) l (HList b), HReplicateFD n (HList ('[] :: [Type])) es, SameLength' (HReplicateR n ()) a, HLengthEq1 a n, HLengthEq2 a n) => HList (HList a : l) -> HList c
+ Data.HList.HZip: hTranspose :: forall {a :: [Type]} {b :: [Type]} {c :: [Type]} {es :: [Type]} {l :: [Type]} {n :: HNat}. (HZip3 a b c, HFoldr HZipF (HList es) l (HList b), HReplicateFD n (HList ('[] :: [Type])) es, SameLength' (HReplicateR n ()) a, HLengthEq1 a n, HLengthEq2 a n) => HList (HList a ': l) -> HList c
- Data.HList.Keyword: kw :: Kw fn arg_def r => HList (fn : arg_def) -> r
+ Data.HList.Keyword: kw :: Kw fn arg_def r => HList (fn ': arg_def) -> r
- Data.HList.Labelable: data Identity a
+ Data.HList.Labelable: data () => Identity a
- Data.HList.Record: relabeled' :: forall {t :: [Type]} {b :: [Type]} {r} {p} {f}. (RecordValuesR t ~ RecordValuesR b, Relabeled r, HMapAux HList TaggedFn (RecordValuesR t) b, HMapAux HList TaggedFn (RecordValuesR b) t, RecordValues b, RecordValues t, SameLength' t b, SameLength' t (RecordValuesR b), SameLength' b t, SameLength' b (RecordValuesR t), SameLength' (RecordValuesR t) b, SameLength' (RecordValuesR b) t, Profunctor p, Functor f) => p (r b) (f (r b)) -> p (r t) (f (r t))
+ Data.HList.Record: relabeled' :: forall {t :: [Type]} {b :: [Type]} {r} {p} {f}. (RecordValuesR t ~ RecordValuesR b, Relabeled r, HMapAux HList TaggedFn (RecordValuesR b) b, HMapAux HList TaggedFn (RecordValuesR b) t, SameLength' t b, SameLength' t (RecordValuesR b), SameLength' b t, SameLength' (RecordValuesR b) t, RecordValues b, RecordValues t, Profunctor p, Functor f) => p (r b) (f (r b)) -> p (r t) (f (r t))
- Data.HList.RecordU: recordUS' :: forall {x :: [Type]} {g :: [Type]} {f} {p} {u :: [Type]}. (HGroupBy EqTagValue x g, Functor f, Profunctor p, HMapUnboxF g u) => p (RecordUS x) (f (RecordUS x)) -> p (HList u) (f (HList u))
+ Data.HList.RecordU: recordUS' :: forall {f} {p} {x :: [Type]} {g :: [Type]} {u :: [Type]}. (Functor f, Profunctor p, HGroupBy EqTagValue x g, HMapUnboxF g u) => p (RecordUS x) (f (RecordUS x)) -> p (HList u) (f (HList u))
- Data.HList.RecordU: unboxedS :: forall {g :: [Type]} {u :: [Type]} {g :: [Type]} {u :: [Type]} {x :: [Type]} {x :: [Type]} {p} {f}. (HMapUnboxF g u, HMapUnboxF g u, HGroupBy EqTagValue x g, HGroupBy EqTagValue x g, Profunctor p, Functor f, HConcatFD g x, SameLength' u g, SameLength' g u, SameLength' u g, SameLength' g u, HMapAux HList UnboxF g u, HMapAux HList BoxF u g) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
+ Data.HList.RecordU: unboxedS :: forall {x :: [Type]} {g :: [Type]} {x :: [Type]} {g :: [Type]} {p} {f} {u :: [Type]} {u :: [Type]}. (HGroupBy EqTagValue x g, HGroupBy EqTagValue x g, Profunctor p, Functor f, HConcatFD g x, SameLength' u g, SameLength' g u, SameLength' u g, SameLength' g u, HMapAux HList UnboxF g u, HMapAux HList BoxF u g, HMapUnboxF g u, HMapUnboxF g u) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
- Data.HList.RecordU: unboxedS' :: forall {g :: [Type]} {u :: [Type]} {x :: [Type]} {p} {f}. (HMapUnboxF g u, HGroupBy EqTagValue x g, Profunctor p, Functor f, HConcatFD g x, SameLength' u g, SameLength' g u, HMapAux HList UnboxF g u, HMapAux HList BoxF u g) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
+ Data.HList.RecordU: unboxedS' :: forall {g :: [Type]} {x :: [Type]} {f} {p} {u :: [Type]}. (HConcatFD g x, Functor f, Profunctor p, HGroupBy EqTagValue x g, SameLength' u g, SameLength' g u, HMapAux HList BoxF u g, HMapAux HList UnboxF g u, HMapUnboxF g u) => p (RecordUS x) (f (RecordUS x)) -> p (Record x) (f (Record x))
- Data.HList.TIC: mkTIC :: forall {i} {l :: [Type]} {n :: HNat}. (HFind1 i (UnLabel i (LabelsOf l)) (UnLabel i (LabelsOf l)) n, HasField i (Record l) i, HAllTaggedLV l, HLabelSet (LabelsOf l), HAllTaggedEq l, KnownNat (HNat2Nat n)) => i -> TIC l
+ Data.HList.TIC: mkTIC :: forall {i} {l :: [Type]} {n :: HNat}. (HasField i (Record l) i, HAllTaggedLV l, HLabelSet (LabelsOf l), HAllTaggedEq l, KnownNat (HNat2Nat n), HFind1 i (UnLabel i (LabelsOf l)) (UnLabel i (LabelsOf l)) n) => i -> TIC l
- Data.HList.TIC: typeIndexed' :: forall {t :: [Type]} {r} {tr} {p} {f}. (Coercible (TagR (RecordValuesR t)) t, TypeIndexed r tr, HMapAux HList TaggedFn (RecordValuesR t) t, RecordValues t, SameLabels t t, HAllTaggedLV t, HLabelSet (LabelsOf t), TagUntagFD (RecordValuesR t) (TagR (RecordValuesR t)), Profunctor p, Functor f, SameLength' t t, SameLength' (RecordValuesR t) (RecordValuesR t)) => p (tr (TagR (RecordValuesR t))) (f (tr (TagR (RecordValuesR t)))) -> p (r t) (f (r t))
+ Data.HList.TIC: typeIndexed' :: forall {t :: [Type]} {r} {tr} {p} {f}. (Coercible (TagR (RecordValuesR t)) t, SameLabels t t, RecordValues t, HMapAux HList TaggedFn (RecordValuesR t) t, TypeIndexed r tr, HAllTaggedLV t, HLabelSet (LabelsOf t), TagUntagFD (RecordValuesR t) (TagR (RecordValuesR t)), Profunctor p, Functor f, SameLength' t t, SameLength' (RecordValuesR t) (RecordValuesR t)) => p (tr (TagR (RecordValuesR t))) (f (tr (TagR (RecordValuesR t)))) -> p (r t) (f (r t))
- Data.HList.TIP: tipyLens :: forall {n :: HNat} {x} {xs :: [Type]} {l1 :: [Type]} {a} {xs :: [Type]} {b :: Bool} {a} {f}. (HSplitAt1 ('[] :: [Type]) n (Tagged x x : xs) l1 (Tagged a a : xs), HAppendList1 l1 (Tagged a a : xs) (Tagged x x : xs), SameLength' (HReplicateR n ()) l1, HLengthEq1 l1 n, HLengthEq2 l1 n, HEq (Label a) (Label x) b, HFind2 b (Label a) (LabelsOf xs) (Label x : LabelsOf xs) n, HAllTaggedEq (HAppendListR l1 (Tagged a a : xs)), HLabelSet (LabelsOf (HAppendListR l1 (Tagged a a : xs))), HAllTaggedLV (HAppendListR l1 (Tagged a a : xs)), HAppendList l1 (Tagged a a : xs), Functor f) => (a -> f a) -> TIP (Tagged x x : xs) -> f (TIP (HAppendListR l1 (Tagged a a : xs)))
+ Data.HList.TIP: tipyLens :: forall {n :: HNat} {x} {xs :: [Type]} {l1 :: [Type]} {a} {xs :: [Type]} {b :: Bool} {a} {f}. (HSplitAt1 ('[] :: [Type]) n (Tagged x x ': xs) l1 (Tagged a a ': xs), HAppendList1 l1 (Tagged a a ': xs) (Tagged x x ': xs), SameLength' (HReplicateR n ()) l1, HLengthEq1 l1 n, HLengthEq2 l1 n, HEq (Label a) (Label x) b, HFind2 b (Label a) (LabelsOf xs) (Label x ': LabelsOf xs) n, HAllTaggedEq (HAppendListR l1 (Tagged a a ': xs)), HLabelSet (LabelsOf (HAppendListR l1 (Tagged a a ': xs))), HAllTaggedLV (HAppendListR l1 (Tagged a a ': xs)), HAppendList l1 (Tagged a a ': xs), Functor f) => (a -> f a) -> TIP (Tagged x x ': xs) -> f (TIP (HAppendListR l1 (Tagged a a ': xs)))
- Data.HList.TIP: type family TagR (a :: [*]) :: [*]
+ Data.HList.TIP: type family Untag1 (x :: *) :: *
- Data.HList.Variant: eqVariant :: forall {x :: [Type]} {b :: Bool} {x :: [Type]} {y :: [Type]}. (SameLength' x (HMapOutV_gety x Bool), SameLength' (HMapOutV_gety x Bool) x, HMapAux Variant (HFmap UncurryEq) x (HMapOutV_gety x Bool), Unvariant1 b (HMapOutV_gety x Bool) Bool, HAllEqVal (Tagged () Bool : HMapOutV_gety x Bool) b, HAllEqVal (HMapOutV_gety x Bool) b, ZipVariant x y x) => Variant x -> Variant y -> Bool
+ Data.HList.Variant: eqVariant :: forall {x :: [Type]} {b :: Bool} {x :: [Type]} {y :: [Type]}. (SameLength' x (HMapOutV_gety x Bool), SameLength' (HMapOutV_gety x Bool) x, HMapAux Variant (HFmap UncurryEq) x (HMapOutV_gety x Bool), Unvariant1 b (HMapOutV_gety x Bool) Bool, HAllEqVal (Tagged () Bool ': HMapOutV_gety x Bool) b, HAllEqVal (HMapOutV_gety x Bool) b, ZipVariant x y x) => Variant x -> Variant y -> Bool
- Data.HList.Variant: extendVariant :: Variant l -> Variant (e : l)
+ Data.HList.Variant: extendVariant :: Variant l -> Variant (e ': l)
- Data.HList.Variant: splitVariant1 :: Variant (Tagged s x : xs) -> Either x (Variant xs)
+ Data.HList.Variant: splitVariant1 :: Variant (Tagged s x ': xs) -> Either x (Variant xs)
- Data.HList.Variant: splitVariant1' :: Variant (x : xs) -> Either x (Variant xs)
+ Data.HList.Variant: splitVariant1' :: Variant (x ': xs) -> Either x (Variant xs)
- Data.HList.Variant: unvarianted' :: forall {b :: Bool} {t :: [Type]} {a} {f}. (Unvariant1 b t a, HAllEqVal' (Tagged () a : t), HAllEqVal t b, HAllEqVal (Tagged () a : t) b, SameLabels t t, SameLength' t t, Functor f) => (a -> f a) -> Variant t -> f (Variant t)
+ Data.HList.Variant: unvarianted' :: forall {a} {t :: [Type]} {b :: Bool} {f}. (HAllEqVal' (Tagged () a ': t), Unvariant1 b t a, HAllEqVal t b, HAllEqVal (Tagged () a ': t) b, SameLabels t t, SameLength' t t, Functor f) => (a -> f a) -> Variant t -> f (Variant t)
Files
- ChangeLog +8/−0
- Data/HList/FakePrelude.hs +2/−0
- Data/HList/HList.hs +10/−5
- Data/HList/HSort.hs +11/−1
- Data/HList/Label5.hs +4/−1
- Data/HList/Record.hs +2/−1
- Data/HList/TIC.hs +2/−1
- Data/HList/TIP.hs +2/−1
- Data/HList/Variant.hs +6/−1
- HList.cabal +7/−7
- README +17/−12
- examples/HListExample/MainPosting051106.hs +14/−10
- examples/Properties.hs +4/−8
- examples/Properties/Common.hs +6/−0
- examples/Properties/LengthDependent.hs +7/−2
- examples/Properties/LengthDependentSplice.hs +6/−1
- examples/Properties/LengthIndependent.hs +8/−4
ChangeLog view
@@ -1,3 +1,11 @@+20 Feb 2025+0.5.4 Release+Merge Daniil's Itskov's changes:+ Add files for building with nix+ Build with ghc-9.10.1+Remove tests for hCurry and hCompose where ghc-9.4.8 has poor type inference+not seen in newer versions.+ 23 Sep 2023 0.5.3 Release Build with ghc-9.4.6 and ghc-9.6.1.
Data/HList/FakePrelude.hs view
@@ -23,7 +23,9 @@ #if __GLASGOW_HASKELL__ >= 800 import qualified GHC.TypeLits as Data.HList.FakePrelude (ErrorMessage((:$$:), (:<>:))) -- XXX check this works? #endif+#if __GLASGOW_HASKELL__ <= 906 import Control.Applicative+#endif #if NEW_TYPE_EQ import Data.Type.Equality (type (==)) #endif
Data/HList/HList.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {- | The HList library @@ -18,7 +19,10 @@ import LensDefs import Data.Array (Ix)++#if __GLASGOW_HASKELL__ <= 906 import Data.Semigroup+#endif -- -------------------------------------------------------------------------- -- * Heterogeneous type sequences@@ -171,10 +175,10 @@ show _ = "H[]" instance (Show e, Show (HList l)) => Show (HList (e ': l)) where- show (HCons x l) = let 'H':'[':s = show l- in "H[" ++ show x ++- (if s == "]" then s else "," ++ s)-+ show (HCons x l) =+ case show l of+ 'H':'[':s -> "H[" ++ show x ++ (if s == "]" then s else "," ++ s)+ s -> error $ "unreachable branch: " ++ show x ++ " " ++ s instance Read (HList '[]) where readsPrec _ str = case stripPrefix "H[]" str of@@ -1629,7 +1633,9 @@ HMapCxt HList UncurryMappend aa a) => Monoid (HList a) where mempty = hMap ConstMempty $ (hProxies :: HList (AddProxy a))+#if __GLASGOW_HASKELL__ <= 906 mappend a b = hMap UncurryMappend $ hZip a b+#endif instance (HZip HList a a aa,@@ -1649,4 +1655,3 @@ data UncurrySappend = UncurrySappend instance (aa ~ (a,a), Semigroup a) => ApplyAB UncurrySappend aa a where applyAB _ = uncurry (<>)-
Data/HList/HSort.hs view
@@ -77,6 +77,9 @@ instance HEqByFn le => HIsAscList le '[x] True instance HEqByFn le => HIsAscList le '[] True instance (HEqBy le x y b1,+#if __GLASGOW_HASKELL__ > 906+ HEqByFn le,+#endif HIsAscList le (y ': ys) b2, HAnd b1 b2 ~ b3) => HIsAscList le (x ': y ': ys) b3 @@ -144,6 +147,9 @@ hSort2 _ x y = y `HCons` x `HCons` HNil instance (HMerge le xs' ys' sorted,+#if __GLASGOW_HASKELL__ > 906+ HEqByFn le,+#endif HMSortBy le ys ys', HMSortBy le xs xs', HLengthEq (a ': b ': c ': cs) n2,@@ -241,7 +247,11 @@ class HEqByFn le => HAscList0 le (ps :: [*]) (ps0 :: [*]) class HEqByFn le => HAscList1 le (b :: Bool) (ps :: [*]) (ps0 :: [*])-instance (HAscList1 le b (y ': ys) ps0, HEqBy le x y b)+instance ( HAscList1 le b (y ': ys) ps0, HEqBy le x y b+#if __GLASGOW_HASKELL__ > 906+ , HEqByFn le+#endif+ ) => HAscList0 le (x ': y ': ys) ps0 instance HEqByFn le => HAscList0 le '[] ps0 instance HEqByFn le => HAscList0 le '[x] ps0
Data/HList/Label5.hs view
@@ -3,6 +3,9 @@ {-# LANGUAGE OverlappingInstances #-} {-# OPTIONS_GHC -fno-warn-unrecognised-pragmas #-} #endif+#if __GLASGOW_HASKELL__ > 906+{-# LANGUAGE LambdaCase #-}+#endif {- | Description: labels are any instance of Typeable @@ -33,7 +36,7 @@ -- | Show label instance {-# OVERLAPPABLE #-} Typeable (x :: *) => ShowLabel x where- showLabel _ = (\(x:xs) -> toLower x:xs)+ showLabel _ = (\l -> case l of [] -> [] ; (x:xs) -> toLower x:xs) . reverse . takeWhile (not . (==) '.') . reverse
Data/HList/Record.hs view
@@ -198,8 +198,9 @@ import LensDefs import Data.Array (Ix)+#if __GLASGOW_HASKELL__ <= 906 import Data.Semigroup (Semigroup)-+#endif -- imports for doctest/examples import Data.HList.Label6 () import Data.HList.TypeEqO ()
Data/HList/TIC.hs view
@@ -24,8 +24,9 @@ import Data.HList.HArray import Data.Array (Ix)+#if __GLASGOW_HASKELL__ <= 906 import Data.Semigroup (Semigroup)-+#endif import Text.ParserCombinators.ReadP import LensDefs
Data/HList/TIP.hs view
@@ -23,8 +23,9 @@ import Data.HList.TIPtuple import Data.List (intercalate) import Data.Array (Ix)+#if __GLASGOW_HASKELL__ <= 906 import Data.Semigroup (Semigroup)-+#endif #if __GLASGOW_HASKELL__ > 710 import Data.Coerce
Data/HList/Variant.hs view
@@ -28,8 +28,9 @@ import Unsafe.Coerce import GHC.Exts (Constraint)-+#if __GLASGOW_HASKELL__ <= 906 import Data.Semigroup (Semigroup( .. ))+#endif import Data.Data import Control.Applicative import LensDefs@@ -928,17 +929,21 @@ -- * Monoid instance (Unvariant '[Tagged t x] x, Monoid x) => Monoid (Variant '[Tagged t x]) where mempty = mkVariant (Label :: Label t) mempty Proxy+#if __GLASGOW_HASKELL__ <= 906 mappend a b = case (unvariant a, unvariant b) of (l, r) -> mkVariant (Label :: Label t) (mappend l r) Proxy+#endif instance (Monoid x, Monoid (Variant (a ': b))) => Monoid (Variant (Tagged t x ': a ': b)) where mempty = extendVariant mempty+#if __GLASGOW_HASKELL__ <= 906 mappend a b = case (splitVariant1 a, splitVariant1 b) of (Left l, Left r) -> mkVariant (Label :: Label t) (mappend l r) Proxy (Left l, _) -> mkVariant (Label :: Label t) l Proxy (_, Left r) -> mkVariant (Label :: Label t) r Proxy (Right l, Right r) -> extendVariant $ mappend l r+#endif -- * Projection
HList.cabal view
@@ -1,5 +1,5 @@ Name: HList-Version: 0.5.3.0+Version: 0.5.4.0 Category: Data Synopsis: Heterogeneous lists Description: HList provides many operations to create and manipulate@@ -30,7 +30,7 @@ Data-files: README, ChangeLog Cabal-version: >= 1.10-Tested-With: GHC==9.6.1+Tested-With: GHC==9.4.8, GHC==9.6.6, GHC==9.8.2, GHC==9.10.1 Build-Type: Simple Extra-Source-Files:@@ -58,7 +58,7 @@ See <https://ghc.haskell.org/trac/ghc/ticket/9918> library- Build-Depends: base >= 4.6 && < 5,+ Build-Depends: base >= 4.6 && < 4.21, -- for Typeable '[] and '(:) with ghc-7.6 base-orphans, -- Data.Semigroup for ghc < 8@@ -144,14 +144,14 @@ if flag(new_type_eq) Cpp-options: -DNEW_TYPE_EQ- Build-Depends: base >= 4.7+ Build-Depends: base >= 4.7 && < 4.21 Test-Suite examples Type: exitcode-stdio-1.0 Main-Is: HListExample.hs Default-Language: Haskell2010 Hs-Source-Dirs: examples- Build-Depends: base, hspec >= 1.7, directory, filepath,+ Build-Depends: base < 4.21, hspec >= 1.7, directory, filepath, hspec-expectations, process, syb,@@ -188,7 +188,7 @@ -- depending on the ghc version, comes out as one of -- (Bounded a, Enum a) => ... -- (Enum b, Bounded b) => ...- Build-Depends: base, doctest >= 0.8, process+ Build-Depends: base < 4.21, doctest >= 0.8, process Buildable: False Main-Is: rundoctests.hs Hs-Source-Dirs: examples@@ -197,7 +197,7 @@ Test-Suite properties Type: exitcode-stdio-1.0- Build-Depends: base,+ Build-Depends: base < 4.21, hspec >= 1.7, hspec-expectations, HList,
README view
@@ -2,7 +2,7 @@ Contributors: Justin Bailey, Brian Bloniarz, Gwern Branwen, Einar Karttunen,- and Adam Vogt+ Daniil Iaitskov and Adam Vogt The HList library and samples@@ -46,20 +46,25 @@ $ cd HList; cabal install The code was tested --- within the limits exercised in the source files ----with GHC:-- - 9.2.0.20210821- - 9.0.1- - 8.10.6- - 8.8.4- - 8.6.5- - 8.4.4--and may still work with GHC-7.6, 7.8, 7.10, 8.2+with GHC 9.4.8 through 9.10.1 and it may still work older versions possibly back to+GHC-7.6 Older compilers are not supported. One may run "cabal test" to check the distribution. -See ChangeLog for updates.+---------------------------------------------------------------------- +The library can be built and tested in the checked environment (with+compatible GHC, cabal and dependencies) provided by nix:++$ nix-build # builds and runs tests+$ nix-shell --pure # drops into an isolated shell++nix usually can be installed with a single line:++$ sh <(curl -L https://nixos.org/nix/install) --no-daemon++----------------------------------------------------------------------++See ChangeLog for updates.
examples/HListExample/MainPosting051106.hs view
@@ -5,6 +5,10 @@ {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ > 906+{-# LANGUAGE TypeOperators #-}+#endif module HListExample.MainPosting051106 where -- Needed for a reply to the Haskell mailing list@@ -131,17 +135,17 @@ > Sent: Sunday, November 06, 2005 7:01 PM > To: haskell-cafe@haskell.org > Subject: [Haskell-cafe] Type classes and hFoldr from HList-> -> +>+> > I was playing around with the HList library from the paper...-> +> > Strongly typed heterogeneous collections > http://homepages.cwi.nl/~ralf/HList/-> +> > ...and I thought I'd try to fold the composition function (.) through a > heterogeneous list of functions, using hFoldr...-> +> > >{-# OPTIONS -fglasgow-exts #-} > >{-# OPTIONS -fallow-undecidable-instances #-} > >@@ -158,9 +162,9 @@ > >instance Apply (a -> b -> c -> d) (a, b) (c -> d) > > where > > apply f (a,b) = f a b-> +> > ...but it fails with the following type error...-> +> > ]Compiling Main ( compose.hs, interpreted ) > ] > ]compose.hs:10:7:@@ -188,14 +192,14 @@ > > c) > ]([a2] -> Int, a1 -> a1) r1) > ] In the definition of `comp': comp = hFoldr (.) id test-> +> > ...Anyway, I couldn't quite tell whether I was using hFoldr incorrectly, > or if I needed to have more constraints placed on the construction of > "test", or if needed some sort of type-level function that resolves...-> +> > Apply ((b -> c) -> (a -> b) -> a -> c)-> +> > ...into (a -> c), or something else altogether. I figured someone might > be able to help point me in the right direction.
examples/Properties.hs view
@@ -1,5 +1,9 @@ {-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ > 906+{-# OPTIONS_GHC -freduction-depth=100 #-}+#else {-# OPTIONS_GHC -fcontext-stack=100 #-}+#endif {-# OPTIONS_GHC -fno-warn-deprecations #-} -- ghc-7.8 has no Typeable (x :: Symbol), so use OldTypeable {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE DataKinds #-}@@ -33,11 +37,3 @@ hl0 hl1_2_3 kwSpecs--------
examples/Properties/Common.hs view
@@ -145,9 +145,15 @@ instance Monoid (BoolN n) where mempty = BoolN (getAll mempty)+#if __GLASGOW_HASKELL__ <= 906 mappend (BoolN x) (BoolN y) = BoolN (getAll (mappend (All x) (All y))) instance Semigroup (BoolN n) where (<>) = mappend+#else++instance Semigroup (BoolN n) where+ (BoolN x) <> (BoolN y) = BoolN (getAll (mappend (All x) (All y)))+#endif #if !MIN_VERSION_QuickCheck(2,9,0) instance Arbitrary (Identity (BoolN n)) where
examples/Properties/LengthDependent.hs view
@@ -16,6 +16,9 @@ -- supplied HList isn't known until Properties.LengthDependentSplice) module Properties.LengthDependent where +#if MIN_VERSION_base(4,9,0)+import qualified Data.Kind as DK+#endif import Data.HList.HSort (hMSortBy) import Data.HList.Variant (eqVariant)@@ -91,7 +94,11 @@ rss :: [TypeQ] rss = takeK $+#if MIN_VERSION_base(4,9,0)+ [ [t| (Record :: [DK.Type] -> DK.Type) $(hListT (map taggedN ns)) |]+#else [ [t| (Record :: [*] -> *) $(hListT (map taggedN ns)) |]+#endif | ns <- permutations [1 .. fromIntegral n] ] -- taggedN 1 == [t| Tagged 1 x1 |]@@ -463,5 +470,3 @@ ] #endif |]--
examples/Properties/LengthDependentSplice.hs view
@@ -1,4 +1,9 @@-{-# OPTIONS_GHC -fcontext-stack=1000 #-}+{-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ > 906+{-# OPTIONS_GHC -freduction-depth=100 #-}+#else+{-# OPTIONS_GHC -fcontext-stack=100 #-}+#endif {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE RankNTypes #-}
examples/Properties/LengthIndependent.hs view
@@ -575,7 +575,9 @@ return $ conjoin [ hUncurry (,,) (hBuild vx vy vz) `eq` (vx,vy,vz), hCurry (hUncurry (,,)) vx vy vz `eq` (vx,vy,vz),+#if __GLASGOW_HASKELL__ > 948 hCurry (hUncurry id) vx `eq` vx,+#endif hCurry ( \(a `HCons` b `HCons` HNil) -> (b,a)) vx vy `eq` (vy,vx) ] @@ -584,9 +586,12 @@ vy :: BoolN "y" <- arbitrary vz :: BoolN "z" <- arbitrary return $ conjoin- [ hCompose (,) (,) vx vy vz `eq` ((vx,vy), vz),- hCompose id (,) vx vy `eq` (vx,vy),- hCompose (,) id vx vy `eq` (vx,vy) ]+ [ hCompose (,) (,) vx vy vz `eq` ((vx,vy), vz)+ , hCompose id (,) vx vy `eq` (vx,vy),+#if __GLASGOW_HASKELL__ > 948+ , hCompose (,) id vx vy `eq` (vx,vy)+#endif+ ] hTuples = do@@ -681,4 +686,3 @@ v2 = fmap (`asLabelsOf` (Proxy :: Proxy '[Label "y"])) (projectVariant v) v_id = fmap (`asLabelsOf` v) (projectVariant v) v_id2 = fmap (`asLabelsOf` labelsOf v) (projectVariant v)-