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.