@@ -67,13 +67,13 @@ module Language.PureScript.Parser.Lexer
6767 , natural
6868 , reservedPsNames
6969 , reservedTypeNames
70− , opChars
70+ , isSymbolChar
7171 )
7272 where
7373
7474import Prelude hiding (lex)
7575
76−import Data.Char (isSpace)
76+import Data.Char (isSpace, isAscii, isSymbol)
7777
7878import Control.Monad (void, guard)
7979import Data.Functor.Identity
@@ -233,7 +233,7 @@ parseToken = P.choice
233233 uidentLetter = P.alphaNum <|> P.char '_'
234234
235235 symbolChar :: P.Parsec String u Char
236− symbolChar = P.oneOf opChars
236+ symbolChar = P.satisfy isSymbolChar
237237
238238 parseCharLiteral :: P.Parsec String u Char
239239 parseCharLiteral = PT.charLiteral tokenParser
@@ -516,5 +516,5 @@ reservedTypeNames = [ "forall", "where" ]
516516-- |
517517-- The characters allowed for use in operators
518518--
519−opChars :: [Char]
520−opChars = ":!#$%&*+./<=>?@\\^|-~"
519+isSymbolChar :: Char -> Bool
520+isSymbolChar c = (c `elem` ":!#$%&*+./<=>?@\\^|-~") || (not (isAscii c) && isSymbol c)