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

Safe HaskellNone
LanguageHaskell2010

Type.Container

Documentation

type family In (el :: ke) (cont :: k) :: Bool Source #

Instances

type In ke [k] a ([] k) Source # 
type In ke [k] a ([] k) = False
type In ke [ke] a ((:) ke l ls) Source # 
type In ke [ke] a ((:) ke l ls) = If Bool ((==) ke a l) True (In ke [ke] a ls)

type family Index2 (idx :: i) (cont :: c) :: el Source #

Instances

type Index2 Nat [el] el n ((:) el a as) Source # 
type Index2 Nat [el] el n ((:) el a as) = If el ((==) Nat n 0) a (Index2 Nat [el] el ((-) n 1) as)

type family Index (el :: ke) (cont :: k) :: Maybe Nat Source #

Instances

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

type family IndexF (el :: ke) (cont :: k) :: Nat Source #

Instances

type IndexF ke [ke] a ((:) ke l ls) Source # 
type IndexF ke [ke] a ((:) ke l ls) = If Nat ((==) ke a l) 0 ((+) (IndexF ke [ke] a ls) 1)

type family Append (el :: ke) (cont :: k) :: k Source #

Instances

type Append k [k] a ([] k) Source # 
type Append k [k] a ([] k) = (:) k a ([] k)
type Append ke [a1] a2 ((:) a1 l ls) Source # 
type Append ke [a1] a2 ((:) a1 l ls) = (:) a1 l (Append ke [a1] a2 ls)

type family Insert (el :: ke) (cont :: k) :: k Source #

Instances

type Insert k * a (Set k ((:) k s ss)) Source # 
type Insert k * a (Set k ((:) k s ss)) = ($) [k] * (Set k) (If [k] ((==) k a s) ((:) k s ss) ((:) k s (Unwrapped * [k] (Insert k * a (Set k ss)))))
type Insert k1 * a (Set k2 ([] k2)) Source # 
type Insert k1 * a (Set k2 ([] k2)) = Set k1 ((:) k1 a ([] k1))

type family Remove (el :: ke) (cont :: k) :: k Source #

Instances

type Remove ke [k] a ([] k) Source # 
type Remove ke [k] a ([] k) = [] k
type Remove ke [ke] a ((:) ke l ls) Source # 
type Remove ke [ke] a ((:) ke l ls) = If [ke] ((==) ke a l) ls ((:) ke l (Remove ke [ke] a ls))

type family Empty (cont :: k) :: Bool Source #

Instances

type Empty [k] ([] k) Source # 
type Empty [k] ([] k) = True
type Empty [a1] ((:) a1 a2 as) Source # 
type Empty [a1] ((:) a1 a2 as) = False

type family Size (cont :: k) :: Nat Source #

Instances

type Size [k] ([] k) Source # 
type Size [k] ([] k) = 0
type Size [a1] ((:) a1 a2 as) Source # 
type Size [a1] ((:) a1 a2 as) = (+) 1 (Size [a1] as)

type family Reverse (cont :: k) :: k Source #

Instances

type Reverse [k] lst Source # 
type Reverse [k] lst = Reverse' k lst ([] k)

type family Unique (cont :: k) :: k Source #

Instances

type Unique [k] lst Source # 
type Unique [k] lst = ToList k (AsSet [k] lst)

type family Diff (c :: k) (c' :: k) :: k Source #

Instances

type Diff [k] l ([] k) Source # 
type Diff [k] l ([] k) = l
type Diff [ke] l ((:) ke e es) Source # 
type Diff [ke] l ((:) ke e es) = Diff [ke] (Remove ke [ke] e l) es

type family Union (c :: k) (c' :: k) :: k Source #

type family Every a :: [*] Source #

type family FromJust a where ... Source #

Equations

FromJust (Just a) = a 

type UnsafeIndex el cont = FromJust (Index el cont) Source #