varid  (small {small | large | digit | ' }) / reservedid
     conid  large {small | large | digit | ' }
reservedid  case | class | data | default | deriving | do | else
           | foreign | if | import | in | infix | infixl
           | infixr | instance | let | module | newtype | of
           | then | type | where | _

     small  ascSmall | uniSmall | _
  ascSmall  a | b |  | z
  uniSmall  any Unicode lowercase letter
 
     large  ascLarge | uniLarge
  ascLarge  A | B |  | Z
  uniLarge  any uppercase or titlecase Unicode letter

     digit  ascDigit | uniDigit
  ascDigit  0 | 1 |  | 9
  uniDigit  any Unicode decimal digit