Alternative patterns

Alternative patterns can be given for a case clause using the | operator. If any of the patterns match then the clause matches.

If a pattern defines a variable then all of the alternative patterns for that clause must also define a variable with the same name and same type.

Currently it is not possible to have nested alternative patterns, so the pattern [1 | 2 | 3] is not valid.