type-combinators-0.2.4.3: A collection of data types for type-level programming

CopyrightCopyright (C) 2015 Kyle Carter
LicenseBSD3
MaintainerKyle Carter <kylcarte@indiana.edu>
Stabilityexperimental
PortabilityRankNTypes
Safe HaskellNone
LanguageHaskell2010

Data.Type.Remove

Description

A singleton-esque type for representing the removal of an element from a type level list.

Documentation

data Remove :: [k] -> k -> [k] -> * where Source #

Constructors

RZ :: Remove (a :< as) a as 
RS :: !(Remove as a bs) -> Remove (b :< as) a (b :< bs) 

Instances

Witness ØC (Without k as a bs) (Remove k as a bs) Source # 

Associated Types

type WitnessC (ØC :: Constraint) (Without k as a bs :: Constraint) (Remove k as a bs) :: Constraint Source #

Methods

(\\) :: ØC => (Without k as a bs -> r) -> Remove k as a bs -> r Source #

Read3 [l] l [l] (Remove l) Source # 

Methods

readsPrec3 :: Int -> ReadS (Some3 (Remove l) l k f) Source #

Show3 [l] l [l] (Remove l) Source # 

Methods

showsPrec3 :: Int -> f a b c -> ShowS Source #

show3 :: f a b c -> String Source #

Ord3 [l] l [l] (Remove l) Source # 

Methods

compare3 :: f a b c -> f a b c -> Ordering Source #

(<###) :: f a b c -> f a b c -> Bool Source #

(>###) :: f a b c -> f a b c -> Bool Source #

(<=###) :: f a b c -> f a b c -> Bool Source #

(>=###) :: f a b c -> f a b c -> Bool Source #

Eq3 [l] l [l] (Remove l) Source # 

Methods

eq3 :: f a b c -> f a b c -> Bool Source #

neq3 :: f a b c -> f a b c -> Bool Source #

Show2 [k] k (Remove k as) Source # 

Methods

showsPrec2 :: Int -> f a b -> ShowS Source #

show2 :: f a b -> String Source #

Ord2 [k] k (Remove k as) Source # 

Methods

compare2 :: f a b -> f a b -> Ordering Source #

(<##) :: f a b -> f a b -> Bool Source #

(>##) :: f a b -> f a b -> Bool Source #

(<=##) :: f a b -> f a b -> Bool Source #

(>=##) :: f a b -> f a b -> Bool Source #

Eq2 [k] k (Remove k as) Source # 

Methods

eq2 :: f a b -> f a b -> Bool Source #

neq2 :: f a b -> f a b -> Bool Source #

TestEquality [k] (Remove k as a) Source # 

Methods

testEquality :: f a -> f b -> Maybe ((Remove k as a :~: a) b) #

Show1 [k] (Remove k as a) Source # 

Methods

showsPrec1 :: Int -> f a -> ShowS Source #

show1 :: f a -> String Source #

Ord1 [k] (Remove k as a) Source # 

Methods

compare1 :: f a -> f a -> Ordering Source #

(<#) :: f a -> f a -> Bool Source #

(>#) :: f a -> f a -> Bool Source #

(<=#) :: f a -> f a -> Bool Source #

(>=#) :: f a -> f a -> Bool Source #

Eq1 [k] (Remove k as a) Source # 

Methods

eq1 :: f a -> f a -> Bool Source #

neq1 :: f a -> f a -> Bool Source #

Without k as a bs => Known [k] (Remove k as a) bs Source # 

Associated Types

type KnownC (Remove k as a) (bs :: Remove k as a -> *) (a :: Remove k as a) :: Constraint Source #

Methods

known :: bs a Source #

Eq (Remove k as a bs) Source # 

Methods

(==) :: Remove k as a bs -> Remove k as a bs -> Bool #

(/=) :: Remove k as a bs -> Remove k as a bs -> Bool #

Ord (Remove k as a bs) Source # 

Methods

compare :: Remove k as a bs -> Remove k as a bs -> Ordering #

(<) :: Remove k as a bs -> Remove k as a bs -> Bool #

(<=) :: Remove k as a bs -> Remove k as a bs -> Bool #

(>) :: Remove k as a bs -> Remove k as a bs -> Bool #

(>=) :: Remove k as a bs -> Remove k as a bs -> Bool #

max :: Remove k as a bs -> Remove k as a bs -> Remove k as a bs #

min :: Remove k as a bs -> Remove k as a bs -> Remove k as a bs #

Show (Remove k as a bs) Source # 

Methods

showsPrec :: Int -> Remove k as a bs -> ShowS #

show :: Remove k as a bs -> String #

showList :: [Remove k as a bs] -> ShowS #

type WitnessC ØC (Without k as a bs) (Remove k as a bs) Source # 
type WitnessC ØC (Without k as a bs) (Remove k as a bs) = ØC
type KnownC [k] (Remove k as a) bs Source # 
type KnownC [k] (Remove k as a) bs = Without k as a bs

remLen :: Remove as a bs -> S (Len bs) :~: Len as Source #

elimRemove :: (forall xs. p (a :< xs) a xs) -> (forall x xs ys. Remove xs a ys -> p xs a ys -> p (x :< xs) a (x :< ys)) -> Remove as a bs -> p as a bs Source #

remIx :: Remove as a bs -> Index as a Source #

remSub :: Length bs -> Remove as a bs -> Subset as bs Source #

ixRem :: Index as a -> Some (Remove as a) Source #

remProd :: Remove as a bs -> Prod f as -> (f a, Prod f bs) Source #

remSum :: Remove as a bs -> Sum f as -> Either (f a) (Sum f bs) Source #

class Without as a bs | as a -> bs where Source #

Minimal complete definition

without

Methods

without :: Remove as a bs Source #

Instances

((~) [k] cs ((:<) k b bs), Without k as a bs) => Without k ((:<) k b as) a cs Source # 

Methods

without :: Remove ((k :< b) as) a cs bs Source #

(~) [k] as bs => Without k ((:<) k a as) a bs Source # 

Methods

without :: Remove ((k :< a) as) a bs bs Source #

Witness ØC (Without k as a bs) (Remove k as a bs) Source # 

Associated Types

type WitnessC (ØC :: Constraint) (Without k as a bs :: Constraint) (Remove k as a bs) :: Constraint Source #

Methods

(\\) :: ØC => (Without k as a bs -> r) -> Remove k as a bs -> r Source #

type WitnessC ØC (Without k as a bs) (Remove k as a bs) Source # 
type WitnessC ØC (Without k as a bs) (Remove k as a bs) = ØC