Is there a complete list of allowed characters somewhere, or a rule that determines what can be used in an identifier vs an operator?
What I was looking for was the complete list of characters. Based on the other answers, the full list is;
Unicode Punctuation:
Unicode Symbols:
But excluding the following characters with special meaning in Haskell:
(),;[]`{}_:"'
A :
is only permitted as the first character of the operator, and denotes a constructor (see An operator symbol starting with a colon is a constructor).