Discriminated unions encoded as Coproducts
of their value types intersected with
the singleton types of their keys.
Discriminated unions encoded as Coproducts
of their value types intersected with
the singleton types of their keys.
Union types may be written using a relatively concise syntax thanks to a trick
due to Denys Shabalin (@den_sh) and Eugene Burmako (@xeno_by). We use a
combination of selectDynamic
and backticks to embed a type in a path which
appears to the compiler as stable,
type Xyz = Union.`'x -> Int, 'y -> String, 'z -> Boolean`.T
The use of singleton-typed Symbols
as keys would make this type extremely
laborious to write out by hand.
There is also a mechanism for creating values of union types using Scala's named argument syntax. Values of the type just defined can be created as follows,
val y = Union[Xyx](y = "foo") y.get('y) // == Some("foo")