| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Newtype.Union
Synopsis
- module Data.Type.Coercion.Related
- data IsUnion x y z = IsUnion {}
- withUnion :: Related x y -> (forall xy. IsUnion x y xy -> r) -> r
- unique :: IsUnion x y z -> IsUnion x y z' -> Coercion z z'
- greater :: Sub x y -> IsUnion x y y
- idemp :: IsUnion x x x
- commutative :: IsUnion x y z -> IsUnion y x z
- associative :: IsUnion x y xy -> IsUnion xy z xy'z -> IsUnion y z yz -> IsUnion x yz x'yz -> Coercion xy'z x'yz
Documentation
module Data.Type.Coercion.Related
IsUnion x y z witnesses the fact:
- All
x, y, zshare the same runtime representation zis a union type ofxandy. In other words, the following three holds:Subx zSub y z
- For any type
rsatisfying both of(Sub x r, Sub y r),Sub z r.
withUnion :: Related x y -> (forall xy. IsUnion x y xy -> r) -> r Source #
For a pair of Related types x and y, make some (existentially quantified)
type xy where xy is a union type of x, y.
unique :: IsUnion x y z -> IsUnion x y z' -> Coercion z z' Source #
Two union types z,z' of the same pair of types x,y may be different,
but they are equivalent in terms of coercibility.
idemp :: IsUnion x x x Source #
Union is idempotent.
Note: combining idemp and unique, IsUnion x x z -> Coercible x z holds.