|| Enumerations weekday ::= Mon | Tue | Wed | Thu | Fri weekend ::= Sat | Sun || A union day ::= InWeek weekday | NonWeek weekend || Two structured types numlist ::= NullNumNode | NumNode num numlist list * ::= NullNode | Node (*) (list *) Mon:: => weekday Sat:: => weekend InWeek Mon:: => day NumNode 5 NullNumNode:: => numlist Node 5 NullNode:: => list num Node 'a' NullNode:: => list char