@@ -41,8 +41,8 @@ module Language.PureScript.Parser.Lexer
4141 , commaSep1
4242 , lname
4343 , qualifier
44+ , tyname
4445 , uname
45- , uname'
4646 , mname
4747 , reserved
4848 , symbol
@@ -213,8 +213,9 @@ parseToken = P.choice
213213 , P. try $ P. char ' _' *> P. notFollowedBy identLetter *> pure Underscore
214214 , HoleLit <$> P. try (P. char ' ?' *> P. many1 identLetter)
215215 , LName <$> parseLName
216- , do uName <- parseUName
217- (guard (validModuleName uName) >> Qualifier uName <$ P. char ' .' ) <|> pure (UName uName)
216+ , parseUName >>= \ uName ->
217+ (guard (validModuleName uName) >> Qualifier uName <$ P. char ' .' )
218+ <|> pure (UName uName)
218219 , Symbol <$> parseSymbol
219220 , CharLiteral <$> parseCharLiteral
220221 , StringLiteral <$> parseStringLiteral
@@ -226,7 +227,7 @@ parseToken = P.choice
226227 parseLName = (:) <$> identStart <*> P. many identLetter
227228
228229 parseUName :: P. Parsec String u String
229- parseUName = (:) <$> P. upper <*> P. many uidentLetter
230+ parseUName = (:) <$> P. upper <*> P. many identLetter
230231
231232 parseSymbol :: P. Parsec String u String
232233 parseSymbol = P. many1 symbolChar
@@ -237,9 +238,6 @@ parseToken = P.choice
237238 identLetter :: P. Parsec String u Char
238239 identLetter = P. alphaNum <|> P. oneOf " _'"
239240
240- uidentLetter :: P. Parsec String u Char
241- uidentLetter = P. alphaNum <|> P. char ' _'
242-
243241 symbolChar :: P. Parsec String u Char
244242 symbolChar = P. satisfy isSymbolChar
245243
@@ -430,6 +428,12 @@ reserved s = token go P.<?> show s
430428
431429uname :: TokenParser String
432430uname = token go P. <?> " proper name"
431+ where
432+ go (UName s) | validUName s = Just s
433+ go _ = Nothing
434+
435+ tyname :: TokenParser String
436+ tyname = token go P. <?> " type name"
433437 where
434438 go (UName s) = Just s
435439 go _ = Nothing
@@ -440,12 +444,6 @@ mname = token go P.<?> "module name"
440444 go (UName s) | validModuleName s = Just s
441445 go _ = Nothing
442446
443- uname' :: String -> TokenParser ()
444- uname' s = token go P. <?> show s
445- where
446- go (UName s') | s == s' = Just ()
447- go _ = Nothing
448-
449447symbol :: TokenParser String
450448symbol = token go P. <?> " symbol"
451449 where
@@ -496,6 +494,9 @@ identifier = token go P.<?> "identifier"
496494validModuleName :: String -> Bool
497495validModuleName s = ' _' `notElem` s
498496
497+ validUName :: String -> Bool
498+ validUName s = ' \' ' `notElem` s
499+
499500-- |
500501-- A list of purescript reserved identifiers
501502--
0 commit comments