indextype-0.3.0.0: A series of type families and constraints for "indexable" types.

Safe HaskellNone
LanguageHaskell2010

Control.IndexT.TypeLevel.Tuple

Description

Type family and class definitions for dealing with tuples.

Control.IndexT.Tuple but with tuples raised to the type level and polykinded.

Synopsis

Documentation

type family TupleConstraint (n :: Nat) (a :: k) :: Constraint Source #

Type level version of TupleConstraint

Instances

type TupleConstraint k 15 a Source # 
type TupleConstraint k 15 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a) (IndexT (Any *) k 9 a) (IndexT (Any *) k 10 a) (IndexT (Any *) k 11 a) (IndexT (Any *) k 12 a) (IndexT (Any *) k 13 a) (IndexT (Any *) k 14 a))
type TupleConstraint k 14 a Source # 
type TupleConstraint k 14 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a) (IndexT (Any *) k 9 a) (IndexT (Any *) k 10 a) (IndexT (Any *) k 11 a) (IndexT (Any *) k 12 a) (IndexT (Any *) k 13 a))
type TupleConstraint k 13 a Source # 
type TupleConstraint k 13 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a) (IndexT (Any *) k 9 a) (IndexT (Any *) k 10 a) (IndexT (Any *) k 11 a) (IndexT (Any *) k 12 a))
type TupleConstraint k 12 a Source # 
type TupleConstraint k 12 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a) (IndexT (Any *) k 9 a) (IndexT (Any *) k 10 a) (IndexT (Any *) k 11 a))
type TupleConstraint k 11 a Source # 
type TupleConstraint k 11 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a) (IndexT (Any *) k 9 a) (IndexT (Any *) k 10 a))
type TupleConstraint k 10 a Source # 
type TupleConstraint k 10 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a) (IndexT (Any *) k 9 a))
type TupleConstraint k 9 a Source # 
type TupleConstraint k 9 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a) (IndexT (Any *) k 8 a))
type TupleConstraint k 8 a Source # 
type TupleConstraint k 8 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a) (IndexT (Any *) k 7 a))
type TupleConstraint k 7 a Source # 
type TupleConstraint k 7 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a) (IndexT (Any *) k 6 a))
type TupleConstraint k 6 a Source # 
type TupleConstraint k 6 a = (~~) k (Any *, Any *, Any *, Any *, Any *, Any *) a ((,,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a) (IndexT (Any *) k 5 a))
type TupleConstraint k 5 a Source # 
type TupleConstraint k 5 a = (~~) k (Any *, Any *, Any *, Any *, Any *) a ((,,,,) (Any *) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a) (IndexT (Any *) k 4 a))
type TupleConstraint k 4 a Source # 
type TupleConstraint k 4 a = (~~) k (Any *, Any *, Any *, Any *) a ((,,,) (Any *) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a) (IndexT (Any *) k 3 a))
type TupleConstraint k 3 a Source # 
type TupleConstraint k 3 a = (~~) k (Any *, Any *, Any *) a ((,,) (Any *) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a) (IndexT (Any *) k 2 a))
type TupleConstraint k 2 a Source # 
type TupleConstraint k 2 a = (~~) k (Any *, Any *) a ((,) (Any *) (Any *) (IndexT (Any *) k 0 a) (IndexT (Any *) k 1 a))
type TupleConstraint j 0 a Source # 
type TupleConstraint j 0 a = (~~) j () a ()

type family HomoTupleConstraint (n :: Nat) a :: Constraint Source #

HomoTupleConstraint simply further constrains TupleConstraint so that all the elements are the same.

So HomoTupleConstraint 3 t basically says t ~ (u,u,u) for some u,

("Homo" is short for "Homogeneous". As in, all the same. Or like milk.)

Instances

type HomoTupleConstraint 0 a Source # 
type HomoTupleConstraint 1 a Source # 
type HomoTupleConstraint 2 a Source # 
type HomoTupleConstraint 2 a = (TupleConstraint * 2 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a))
type HomoTupleConstraint 3 a Source # 
type HomoTupleConstraint 3 a = (TupleConstraint * 3 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a))
type HomoTupleConstraint 4 a Source # 
type HomoTupleConstraint 4 a = (TupleConstraint * 4 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a))
type HomoTupleConstraint 5 a Source # 
type HomoTupleConstraint 5 a = (TupleConstraint * 5 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a))
type HomoTupleConstraint 6 a Source # 
type HomoTupleConstraint 6 a = (TupleConstraint * 6 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a))
type HomoTupleConstraint 7 a Source # 
type HomoTupleConstraint 7 a = (TupleConstraint * 7 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a))
type HomoTupleConstraint 8 a Source # 
type HomoTupleConstraint 8 a = (TupleConstraint * 8 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a))
type HomoTupleConstraint 9 a Source # 
type HomoTupleConstraint 9 a = (TupleConstraint * 9 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a))
type HomoTupleConstraint 10 a Source # 
type HomoTupleConstraint 10 a = (TupleConstraint * 10 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a), (~) (Any *) (IndexT (Any *) * 8 a) (IndexT (Any *) * 9 a))
type HomoTupleConstraint 11 a Source # 
type HomoTupleConstraint 11 a = (TupleConstraint * 11 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a), (~) (Any *) (IndexT (Any *) * 8 a) (IndexT (Any *) * 9 a), (~) (Any *) (IndexT (Any *) * 9 a) (IndexT (Any *) * 10 a))
type HomoTupleConstraint 12 a Source # 
type HomoTupleConstraint 12 a = (TupleConstraint * 12 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a), (~) (Any *) (IndexT (Any *) * 8 a) (IndexT (Any *) * 9 a), (~) (Any *) (IndexT (Any *) * 9 a) (IndexT (Any *) * 10 a), (~) (Any *) (IndexT (Any *) * 10 a) (IndexT (Any *) * 11 a))
type HomoTupleConstraint 13 a Source # 
type HomoTupleConstraint 13 a = (TupleConstraint * 13 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a), (~) (Any *) (IndexT (Any *) * 8 a) (IndexT (Any *) * 9 a), (~) (Any *) (IndexT (Any *) * 9 a) (IndexT (Any *) * 10 a), (~) (Any *) (IndexT (Any *) * 10 a) (IndexT (Any *) * 11 a), (~) (Any *) (IndexT (Any *) * 11 a) (IndexT (Any *) * 12 a))
type HomoTupleConstraint 14 a Source # 
type HomoTupleConstraint 14 a = (TupleConstraint * 14 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a), (~) (Any *) (IndexT (Any *) * 8 a) (IndexT (Any *) * 9 a), (~) (Any *) (IndexT (Any *) * 9 a) (IndexT (Any *) * 10 a), (~) (Any *) (IndexT (Any *) * 10 a) (IndexT (Any *) * 11 a), (~) (Any *) (IndexT (Any *) * 11 a) (IndexT (Any *) * 12 a), (~) (Any *) (IndexT (Any *) * 12 a) (IndexT (Any *) * 13 a))
type HomoTupleConstraint 15 a Source # 
type HomoTupleConstraint 15 a = (TupleConstraint * 15 a, (~) (Any *) (IndexT (Any *) * 0 a) (IndexT (Any *) * 1 a), (~) (Any *) (IndexT (Any *) * 1 a) (IndexT (Any *) * 2 a), (~) (Any *) (IndexT (Any *) * 2 a) (IndexT (Any *) * 3 a), (~) (Any *) (IndexT (Any *) * 3 a) (IndexT (Any *) * 4 a), (~) (Any *) (IndexT (Any *) * 4 a) (IndexT (Any *) * 5 a), (~) (Any *) (IndexT (Any *) * 5 a) (IndexT (Any *) * 6 a), (~) (Any *) (IndexT (Any *) * 6 a) (IndexT (Any *) * 7 a), (~) (Any *) (IndexT (Any *) * 7 a) (IndexT (Any *) * 8 a), (~) (Any *) (IndexT (Any *) * 8 a) (IndexT (Any *) * 9 a), (~) (Any *) (IndexT (Any *) * 9 a) (IndexT (Any *) * 10 a), (~) (Any *) (IndexT (Any *) * 10 a) (IndexT (Any *) * 11 a), (~) (Any *) (IndexT (Any *) * 11 a) (IndexT (Any *) * 12 a), (~) (Any *) (IndexT (Any *) * 12 a) (IndexT (Any *) * 13 a), (~) (Any *) (IndexT (Any *) * 13 a) (IndexT (Any *) * 14 a))

class TupleConstraint n a => IsTuple n a Source #

GHC does not allow you to partially apply type families (or any type declaration for that matter). So if you have a type of * -> Constraint you can't pass TupleConstraint 2, because TupleConstraint is partially applied and this is not allowed.

But you can partially apply classes.

So IsTuple is basically the same as TupleConstraint except that it's a class, not a type family.

Instances

TupleConstraint k n a => IsTuple k n a Source # 

class HomoTupleConstraint n a => IsHomoTuple n a Source #

The version of IsTuple for homogenous tuples (i.e. all the same type).

Instances