Explanation: You can ❰merge❱ the alternatives of a union using a record with one handler per alternative, like this: ┌─────────────────────────────────────────────────────────────────────┐ │ let union = < Left = +2 | Right : Bool > │ │ in let handlers = { Left = Natural/even, Right = λ(x : Bool) → x } │ │ in merge handlers union : Bool │ └─────────────────────────────────────────────────────────────────────┘ ... as long as each handler is a function For example, the following expression is $_NOT valid: ┌─────────────────────────────────────────┐ │ merge { Foo = True } < Foo = 1 > : Bool │ └─────────────────────────────────────────┘ ⇧ Invalid: Not a function Your handler for this alternative: ↳ $txt0 ... has the following type: ↳ $txt1 ... which is not the type of a function