Macro and Union Types

Macro type declarations are similar to the above and take the form
def LHS == RHS
but in this case RHS is either a type or a union of types.

A type union is written as
T1 || ... || Tn.

So, for example, following from the above examples

def human == man || woman
def int_tree == tree(int)

In the first example we are declaring human as a macro for the union of the types man and woman and so man and woman are both subtypes of human.