typelevel-1.0.4: Useful type level operations (type families and related operators).

Safe HaskellNone
LanguageHaskell2010

Type.List

Documentation

data Lst l Source

type family FromLst a Source

Equations

FromLst (Lst l) = l 

type family Removed el cont :: l Source

Instances

type Removed [e] e [e] el ((:) e l ls) = If [e] ((==) e el l) ls ((:) e l (Removed [e] e [e] el ls)) Source 

type family RemovedIdx idx cont :: l Source

Instances

type RemovedIdx [k] [k] idx ((:) k l ls) = If [k] ((==) Nat idx 0) ls ((:) k l (RemovedIdx [k] [k] ((-) idx 1) ls)) Source 

type family ElAt idx cont :: l Source

Instances

type ElAt k [k] idx ((:) k l ls) = If k ((==) Nat idx 0) l (ElAt k [k] ((-) idx 1) ls) Source 

type family SuccMaybe m Source

Equations

SuccMaybe (Just n) = Just (n + 1) 
SuccMaybe Nothing = Nothing 

data Recursive a Source

Instances

type Index k * a (Recursive [k1] ([] k1)) = Nothing Nat Source 
type Index k * a (Recursive [k] ((:) k l ls)) = If (Maybe Nat) ((==) k a l) (Just Nat 0) (SuccMaybe (Index k * a (Recursive [k] ls))) Source 

type family Head lst Source

Equations

Head `[]` = Nothing 
Head (a : as) = Just a 

type family Head' lst Source

Equations

Head' (a : as) = a 

type family UniqueFix lst Source

Equations

UniqueFix `[]` = `[]` 
UniqueFix lst = Unique lst 

type family Reverse' lst lst' Source

Equations

Reverse' `[]` lst = lst 
Reverse' (l : ls) lst = Reverse' ls (l : lst) 

type family Take n lst Source

Equations

Take 0 lst = `[]` 
Take n (l : ls) = l : Take (n - 1) ls