Copyright | (C) 2020 Csongor Kiss |
---|---|
License | BSD3 |
Maintainer | Csongor Kiss <kiss.csongor.kiss@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Derive an isomorphism between a product type and a flat HList.
Documentation
class GIsList (f :: Type -> Type ) (g :: Type -> Type ) (as :: [ Type ]) (bs :: [ Type ]) | f -> as, g -> bs, bs f -> g, as g -> f where Source #
Instances
GIsList ( U1 :: Type -> Type ) ( U1 :: Type -> Type ) ('[] :: [ Type ]) ('[] :: [ Type ]) Source # | |
GIsList ( Rec0 a) ( Rec0 b) '[a] '[b] Source # | |
( GIsList l l' as as', GIsList r r' bs bs', Appending as bs cs as' bs' cs', cs ~ (as ++ bs), cs' ~ (as' ++ bs')) => GIsList (l :*: r) (l' :*: r') cs cs' Source # | |
GIsList f g as bs => GIsList ( M1 t meta f) ( M1 t meta g) as bs Source # | |
class IndexList (i :: Nat ) as bs a b | i as -> a, i bs -> b, i as b -> bs, i bs a -> as where Source #
class ListTuple (tuple :: Type ) (tuple' :: Type ) (as :: [ Type ]) (bs :: [ Type ]) | as -> tuple, bs -> tuple' where Source #
tupled :: Iso ( HList as) ( HList bs) tuple tuple' Source #
tupleToList :: tuple' -> HList bs Source #
listToTuple :: HList as -> tuple Source #
Instances
ListTuple () () ('[] :: [ Type ]) ('[] :: [ Type ]) Source # | |
Defined in Data.Generics.Product.Internal.HList |
|
ListTuple a a' '[a] '[a'] Source # | |
Defined in Data.Generics.Product.Internal.HList |
|
ListTuple (a1, b1) (a2, b2) '[a1, b1] '[a2, b2] Source # | |
Defined in Data.Generics.Product.Internal.HList |
|
ListTuple (a1, b1, c1) (a2, b2, c2) '[a1, b1, c1] '[a2, b2, c2] Source # | |
Defined in Data.Generics.Product.Internal.HList |
|
ListTuple (a1, b1, c1, d1) (a2, b2, c2, d2) '[a1, b1, c1, d1] '[a2, b2, c2, d2] Source # | |
Defined in Data.Generics.Product.Internal.HList |
|
ListTuple (a1, b1, c1, d1, e1) (a2, b2, c2, d2, e2) '[a1, b1, c1, d1, e1] '[a2, b2, c2, d2, e2] Source # | |
Defined in Data.Generics.Product.Internal.HList |
|
ListTuple (a1, b1, c1, d1, e1, f1) (a2, b2, c2, d2, e2, f2) '[a1, b1, c1, d1, e1, f1] '[a2, b2, c2, d2, e2, f2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1]) ( HList '[a2, b2, c2, d2, e2, f2]) (a1, b1, c1, d1, e1, f1) (a2, b2, c2, d2, e2, f2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2) -> HList '[a2, b2, c2, d2, e2, f2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1] -> (a1, b1, c1, d1, e1, f1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1) (a2, b2, c2, d2, e2, f2, g2) '[a1, b1, c1, d1, e1, f1, g1] '[a2, b2, c2, d2, e2, f2, g2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1]) ( HList '[a2, b2, c2, d2, e2, f2, g2]) (a1, b1, c1, d1, e1, f1, g1) (a2, b2, c2, d2, e2, f2, g2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2) -> HList '[a2, b2, c2, d2, e2, f2, g2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1] -> (a1, b1, c1, d1, e1, f1, g1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1) (a2, b2, c2, d2, e2, f2, g2, h2) '[a1, b1, c1, d1, e1, f1, g1, h1] '[a2, b2, c2, d2, e2, f2, g2, h2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2]) (a1, b1, c1, d1, e1, f1, g1, h1) (a2, b2, c2, d2, e2, f2, g2, h2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1] -> (a1, b1, c1, d1, e1, f1, g1, h1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1) (a2, b2, c2, d2, e2, f2, g2, h2, j2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1) (a2, b2, c2, d2, e2, f2, g2, h2, j2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1) Source # |
|
ListTuple (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2) '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1] '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2] Source # | |
Defined in Data.Generics.Product.Internal.HList tupled :: Iso ( HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1]) ( HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2]) (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1) (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2) Source # tupleToList :: (a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2) -> HList '[a2, b2, c2, d2, e2, f2, g2, h2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2] Source # listToTuple :: HList '[a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1] -> (a1, b1, c1, d1, e1, f1, g1, h1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1) Source # |
type family TupleToList a where ... Source #
TupleToList () = '[] | |
TupleToList (a, b) = '[a, b] | |
TupleToList (a, b, c) = '[a, b, c] | |
TupleToList (a, b, c, d) = '[a, b, c, d] | |
TupleToList (a, b, c, d, e) = '[a, b, c, d, e] | |
TupleToList (a, b, c, d, e, f) = '[a, b, c, d, e, f] | |
TupleToList (a, b, c, d, e, f, g) = '[a, b, c, d, e, f, g] | |
TupleToList (a, b, c, d, e, f, g, h) = '[a, b, c, d, e, f, g, h] | |
TupleToList (a, b, c, d, e, f, g, h, j) = '[a, b, c, d, e, f, g, h, j] | |
TupleToList (a, b, c, d, e, f, g, h, j, k) = '[a, b, c, d, e, f, g, h, j, k] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l) = '[a, b, c, d, e, f, g, h, j, k, l] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m) = '[a, b, c, d, e, f, g, h, j, k, l, m] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m, n) = '[a, b, c, d, e, f, g, h, j, k, l, m, n] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m, n, o) = '[a, b, c, d, e, f, g, h, j, k, l, m, n, o] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m, n, o, p) = '[a, b, c, d, e, f, g, h, j, k, l, m, n, o, p] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, q) = '[a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, q] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, q, r) = '[a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, q, r] | |
TupleToList (a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, q, r, s) = '[a, b, c, d, e, f, g, h, j, k, l, m, n, o, p, q, r, s] | |
TupleToList a = '[a] |