@@ -41,8 +41,8 @@ module Language.PureScript.Parser.Lexer
41 , commaSep1
41 , commaSep1
43 , qualifier
43 , qualifier
47 , reserved
47 , reserved
@@ -213,8 +213,9 @@ parseToken = P.choice
213 , P.try $ P.char '_' *> P.notFollowedBy identLetter *> pure Underscore
213 , P.try $ P.char '_' *> P.notFollowedBy identLetter *> pure Underscore
214 , HoleLit <$> P.try (P.char '?' *> P.many1 identLetter)
214 , HoleLit <$> P.try (P.char '?' *> P.many1 identLetter)
215 , LName <$> parseLName
215 , LName <$> parseLName
216− , do uName <- parseUName
216+ , parseUName >>= \uName ->
217− (guard (validModuleName uName) >> Qualifier uName <$ P.char '.') <|> pure (UName uName)
217+ (guard (validModuleName uName) >> Qualifier uName <$ P.char '.')
218+ <|> pure (UName uName)
218 , Symbol <$> parseSymbol
219 , Symbol <$> parseSymbol
219 , CharLiteral <$> parseCharLiteral
220 , CharLiteral <$> parseCharLiteral
220 , StringLiteral <$> parseStringLiteral
221 , StringLiteral <$> parseStringLiteral
@@ -226,7 +227,7 @@ parseToken = P.choice
226 parseLName = (:) <$> identStart <*> P.many identLetter
227 parseLName = (:) <$> identStart <*> P.many identLetter
228 parseUName :: P.Parsec String u String
229 parseUName :: P.Parsec String u String
229− parseUName = (:) <$> P.upper <*> P.many uidentLetter
230+ parseUName = (:) <$> P.upper <*> P.many identLetter
231 parseSymbol :: P.Parsec String u String
232 parseSymbol :: P.Parsec String u String
232 parseSymbol = P.many1 symbolChar
233 parseSymbol = P.many1 symbolChar
@@ -237,9 +238,6 @@ parseToken = P.choice
237 identLetter :: P.Parsec String u Char
238 identLetter :: P.Parsec String u Char
238 identLetter = P.alphaNum <|> P.oneOf "_'"
239 identLetter = P.alphaNum <|> P.oneOf "_'"
240− uidentLetter :: P.Parsec String u Char
241− uidentLetter = P.alphaNum <|> P.char '_'
243 symbolChar :: P.Parsec String u Char
241 symbolChar :: P.Parsec String u Char
244 symbolChar = P.satisfy isSymbolChar
242 symbolChar = P.satisfy isSymbolChar
@@ -430,6 +428,12 @@ reserved s = token go P.<?> show s
431uname :: TokenParser String
429uname :: TokenParser String
432uname = token go P.<?> "proper name"
430uname = token go P.<?> "proper name"
432+ go (UName s) | validUName s = Just s
435+tyname :: TokenParser String
436+tyname = token go P.<?> "type name"
434 go (UName s) = Just s
438 go (UName s) = Just s
435 go _ = Nothing
439 go _ = Nothing
@@ -440,12 +444,6 @@ mname = token go P.<?> "module name"
440 go (UName s) | validModuleName s = Just s
444 go (UName s) | validModuleName s = Just s
441 go _ = Nothing
445 go _ = Nothing
443−uname' :: String -> TokenParser ()
444−uname' s = token go P.<?> show s
446− go (UName s') | s == s' = Just ()
449symbol :: TokenParser String
447symbol :: TokenParser String
450symbol = token go P.<?> "symbol"
448symbol = token go P.<?> "symbol"
@@ -496,6 +494,9 @@ identifier = token go P.<?> "identifier"
496validModuleName :: String -> Bool
494validModuleName :: String -> Bool
497validModuleName s = '_' `notElem` s
495validModuleName s = '_' `notElem` s
497+validUName :: String -> Bool
498+validUName s = '\'' `notElem` s
500-- A list of purescript reserved identifiers
501-- A list of purescript reserved identifiers