hset-2.2.0: Primitive list with elements of unique types.

Safe HaskellNone
LanguageHaskell2010

Data.HSet.Union

Documentation

type family MayFstIndexSnd (ts1 :: [k]) (ts2 :: [k]) :: Maybe N where ... #

Equations

MayFstIndexSnd (e ': els) x = IndexOfMay e x 
MayFstIndexSnd '[] x = Nothing 

class (fidx ~ MayFstIndexSnd els1 els2, sidx ~ MayFstIndexSnd els2 els1) => HUnion els1 els2 elsr fidx sidx | els1 els2 fidx sidx -> elsr where #

Minimal complete definition

hunion

Methods

hunion :: HSet els1 -> HSet els2 -> HSet elsr #

Instances

HUnion ([] *) ([] *) ([] *) (Nothing N) (Nothing N) # 

Methods

hunion :: HSet [*] -> HSet [*] -> HSet [*] #

HUnion ([] *) ((:) * e els) ((:) * e els) (Nothing N) (Nothing N) # 

Methods

hunion :: HSet [*] -> HSet ((* ': e) els) -> HSet ((* ': e) els) #

(HRemove N els2 elsx fi, HUnionable els1 elsx elsr, NotElem * e1 elsr, (~) (Maybe N) (Just N fi) (MayFstIndexSnd * ((:) * e1 els1) els2), (~) (Maybe N) (Nothing N) (MayFstIndexSnd * els2 ((:) * e1 els1))) => HUnion ((:) * e1 els1) els2 ((:) * e1 elsr) (Just N fi) (Nothing N) # 

Methods

hunion :: HSet ((* ': e1) els1) -> HSet els2 -> HSet ((* ': e1) elsr) #

HUnion ((:) * e els) ([] *) ((:) * e els) (Nothing N) (Nothing N) # 

Methods

hunion :: HSet ((* ': e) els) -> HSet [*] -> HSet ((* ': e) els) #

(HUnionable els1 els2 elsr, NotElem * e1 ((:) * e2 elsr), NotElem * e2 elsr, (~) (Maybe N) (Nothing N) (MayFstIndexSnd * ((:) * e1 els1) ((:) * e2 els2)), (~) (Maybe N) (Nothing N) (MayFstIndexSnd * ((:) * e2 els2) ((:) * e1 els1))) => HUnion ((:) * e1 els1) ((:) * e2 els2) ((:) * e1 ((:) * e2 elsr)) (Nothing N) (Nothing N) # 

Methods

hunion :: HSet ((* ': e1) els1) -> HSet ((* ': e2) els2) -> HSet ((* ': e1) ((* ': e2) elsr)) #

(HUnionable els1 els2 elsr, NotElem * e1 elsr, (~) (Maybe N) (Nothing N) (MayFstIndexSnd * ((:) * e1 els1) ((:) * e2 els2)), (~) (Maybe N) (Just N si) (MayFstIndexSnd * ((:) * e2 els2) ((:) * e1 els1))) => HUnion ((:) * e1 els1) ((:) * e2 els2) ((:) * e1 elsr) (Nothing N) (Just N si) # 

Methods

hunion :: HSet ((* ': e1) els1) -> HSet ((* ': e2) els2) -> HSet ((* ': e1) elsr) #

(HRemove N els2 elsx fi, HUnionable els1 elsx elsr, NotElem * e1 elsr, (~) (Maybe N) (Just N (S fi)) (MayFstIndexSnd * ((:) * e1 els1) ((:) * e2 els2)), (~) (Maybe N) (Just N si) (MayFstIndexSnd * ((:) * e2 els2) ((:) * e1 els1))) => HUnion ((:) * e1 els1) ((:) * e2 els2) ((:) * e1 elsr) (Just N (S fi)) (Just N si) # 

Methods

hunion :: HSet ((* ': e1) els1) -> HSet ((* ': e2) els2) -> HSet ((* ': e1) elsr) #

(HUnionable els1 els2 elsr, NotElem * e elsr) => HUnion ((:) * e els1) ((:) * e els2) ((:) * e elsr) (Just N Z) (Just N Z) # 

Methods

hunion :: HSet ((* ': e) els1) -> HSet ((* ': e) els2) -> HSet ((* ': e) elsr) #

type HUnionable els1 els2 elsr = HUnion els1 els2 elsr (MayFstIndexSnd els1 els2) (MayFstIndexSnd els2 els1) #