@@ -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--