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

Safe HaskellNone
LanguageHaskell2010

Control.IndexT.Function

Description

Type family and class definitions for dealing with functions.

Many of these definitions are similar to the ones that deal with tuples, in which case it refers to the documentation in Control.IndexT.Tuple.

Also see the Control.IndexT module description for an overview.

Synopsis

Documentation

type family ResultT (n :: Nat) a Source #

ResultT is used to get the result type of functions, which IndexT can not be used for as discussed in it's documentation.

ResultT n t gets the result of t treated as an n argument function. For example:

ResultT 2 (a -> b -> c) == c

note that:

ResultT 2 (a -> b -> c -> d) == c -> d

which makes sense, as the result of applying two arguments to this function is (c -> d).

Instances

type ResultT 0 a Source # 
type ResultT 0 a = a
type ResultT 1 (_ -> a) Source # 
type ResultT 1 (_ -> a) = a
type ResultT 2 (_1 -> _ -> a) Source # 
type ResultT 2 (_1 -> _ -> a) = a
type ResultT 3 (_2 -> _1 -> _ -> a) Source # 
type ResultT 3 (_2 -> _1 -> _ -> a) = a
type ResultT 4 (_3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 4 (_3 -> _2 -> _1 -> _ -> a) = a
type ResultT 5 (_4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 5 (_4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 6 (_5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 6 (_5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 7 (_6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 7 (_6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 8 (_7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 8 (_7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 9 (_8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 9 (_8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 10 (_9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 10 (_9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 11 (_10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 11 (_10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 12 (_11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 12 (_11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 13 (_12 -> _11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 13 (_12 -> _11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 14 (_13 -> _12 -> _11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 14 (_13 -> _12 -> _11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a
type ResultT 15 (_14 -> _13 -> _12 -> _11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) Source # 
type ResultT 15 (_14 -> _13 -> _12 -> _11 -> _10 -> _9 -> _8 -> _7 -> _6 -> _5 -> _4 -> _3 -> _2 -> _1 -> _ -> a) = a

type family FuncN (n :: Nat) a Source #

Like TupleN, but for functions.

Instances

type FuncN 0 a Source # 
type FuncN 0 a = a
type FuncN 1 a Source # 
type FuncN 1 a = IndexT 0 a -> ResultT 1 a
type FuncN 2 a Source # 
type FuncN 2 a = IndexT 0 a -> IndexT 1 a -> ResultT 2 a
type FuncN 3 a Source # 
type FuncN 3 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> ResultT 3 a
type FuncN 4 a Source # 
type FuncN 4 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> ResultT 4 a
type FuncN 5 a Source # 
type FuncN 5 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> ResultT 5 a
type FuncN 6 a Source # 
type FuncN 6 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> ResultT 6 a
type FuncN 7 a Source # 
type FuncN 7 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> ResultT 7 a
type FuncN 8 a Source # 
type FuncN 8 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> ResultT 8 a
type FuncN 9 a Source # 
type FuncN 9 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> ResultT 9 a
type FuncN 10 a Source # 
type FuncN 10 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> IndexT 9 a -> ResultT 10 a
type FuncN 11 a Source # 
type FuncN 11 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> IndexT 9 a -> IndexT 10 a -> ResultT 11 a
type FuncN 12 a Source # 
type FuncN 12 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> IndexT 9 a -> IndexT 10 a -> IndexT 11 a -> ResultT 12 a
type FuncN 13 a Source # 
type FuncN 13 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> IndexT 9 a -> IndexT 10 a -> IndexT 11 a -> IndexT 12 a -> ResultT 13 a
type FuncN 14 a Source # 
type FuncN 14 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> IndexT 9 a -> IndexT 10 a -> IndexT 11 a -> IndexT 12 a -> IndexT 13 a -> ResultT 14 a
type FuncN 15 a Source # 
type FuncN 15 a = IndexT 0 a -> IndexT 1 a -> IndexT 2 a -> IndexT 3 a -> IndexT 4 a -> IndexT 5 a -> IndexT 6 a -> IndexT 7 a -> IndexT 8 a -> IndexT 9 a -> IndexT 10 a -> IndexT 11 a -> IndexT 12 a -> IndexT 13 a -> IndexT 14 a -> ResultT 15 a

type FuncConstraint n a = a ~ FuncN n a Source #

Like TupleConstraint, but for functions.

type HomoFuncConstraint n a = (HomoArgFuncConstraint n a, ResultT n a ~ IndexT 0 a) Source #

Like HomoTupleConstraint, but for functions, where all arguments and the result type are the same.

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

Like HomoFuncConstraint, but only constrains all the arguments to be the same type, not the result.

Instances

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

class FuncConstraint n a => IsFunc n a Source #

Like IsTuple, but for functions.

Instances

class HomoFuncConstraint n a => IsHomoFunc n a Source #

Like IsHomoTuple, but for functions.

Instances

class HomoArgFuncConstraint n a => IsHomoArgFunc n a Source #

A classed based constraint for HomoArgFuncConstraint.