@@ -61,6 +61,7 @@ module Language.PureScript.Parser.Lexer
63 , identifier
63 , identifier
64 , stringLiteral
65 , stringLiteral
@@ -111,6 +112,7 @@ data Token
111 | UName String
112 | UName String
112 | Qualifier String
113 | Qualifier String
113 | Symbol String
114 | Symbol String
114 | StringLiteral String
116 | StringLiteral String
115 | Number (Either Integer Double)
117 | Number (Either Integer Double)
116 deriving (Show, Eq, Ord)
118 deriving (Show, Eq, Ord)
@@ -141,6 +143,7 @@ prettyPrintToken (LName s) = show s
141prettyPrintToken (UName s) = show s
143prettyPrintToken (UName s) = show s
142prettyPrintToken (Qualifier _) = "qualifier"
144prettyPrintToken (Qualifier _) = "qualifier"
143prettyPrintToken (Symbol s) = s
145prettyPrintToken (Symbol s) = s
146+prettyPrintToken (CharLiteral c) = show c
144prettyPrintToken (StringLiteral s) = show s
147prettyPrintToken (StringLiteral s) = show s
145prettyPrintToken (Number n) = either show show n
148prettyPrintToken (Number n) = either show show n
@@ -204,6 +207,7 @@ parseToken = P.choice
204 , do uName <- parseUName
207 , do uName <- parseUName
205 (guard (validModuleName uName) >> Qualifier uName <$ P.char '.') <|> pure (UName uName)
208 (guard (validModuleName uName) >> Qualifier uName <$ P.char '.') <|> pure (UName uName)
206 , Symbol <$> parseSymbol
209 , Symbol <$> parseSymbol
210+ , CharLiteral <$> parseCharLiteral
207 , StringLiteral <$> parseStringLiteral
211 , StringLiteral <$> parseStringLiteral
208 , Number <$> parseNumber
212 , Number <$> parseNumber
209 ] <* whitespace
213 ] <* whitespace
@@ -230,6 +234,9 @@ parseToken = P.choice
230 symbolChar :: P.Parsec String u Char
234 symbolChar :: P.Parsec String u Char
231 symbolChar = P.oneOf opChars
235 symbolChar = P.oneOf opChars
237+ parseCharLiteral :: P.Parsec String u Char
238+ parseCharLiteral = PT.charLiteral tokenParser
233 parseStringLiteral :: P.Parsec String u String
240 parseStringLiteral :: P.Parsec String u String
234 parseStringLiteral = blockString <|> PT.stringLiteral tokenParser
241 parseStringLiteral = blockString <|> PT.stringLiteral tokenParser
@@ -433,6 +440,12 @@ symbol' s = token go P.<?> show s
433 go LFatArrow | s == "<=" = Just ()
440 go LFatArrow | s == "<=" = Just ()
434 go _ = Nothing
441 go _ = Nothing
443+charLiteral :: TokenParser Char
444+charLiteral = token go P.<?> "char literal"
446+ go (CharLiteral c) = Just c
436stringLiteral :: TokenParser String
449stringLiteral :: TokenParser String
437stringLiteral = token go P.<?> "string literal"
450stringLiteral = token go P.<?> "string literal"