let bool: U = sum { True | False };
-- Each constructor have only one argument
-- Capitalized names are constructors so constructor calls are lexically
-- recognizable
let not: bool -> bool = split
{ True => False
| False => True
};
-- Pattern matching
let boolean_id: bool -> bool = \lambda n . n;
-- Simple functions can be defined with lambdas
let and: bool -> bool -> bool = split
{ True => boolean_id
| False => \lambda _. False
};
-- Nested functions