purescript-contrib/purescript-parsing

Float parser does not parse negative numbers

Swordlash opened this issue · 3 comments

Describe the bug
Token parser created by (makeTokenParser emptyDef).float does not parse negative numbers.

To Reproduce
In repl, import Text.Parsing.Parser, Text.Parsing.Parser.Language and Text.Parsing.Parser.Token.
Evaluate runParser "(-6.0)" (makeTokenParser emptyDef).float (parentheses don't matter).

Expected behavior
Right (-6.0)

Actual behavior
(Left (ParseError "Expected float" (Position { line: 1, column: 1 })))

Additional context
I think the parser should be able to parse negative numbers. integer parser already does. Perhaps add a sign-aware parser?

Yeah that sounds like a bug. Thank you very much for reporting.

Hi @Swordlash I hope #142 solves your problem. Please reopen this issue if it doesn't.

Hello @jamesdbrock,

This still seems to be an issue in the 10.2.0 version of the library.

That's probably because the float parser is implemented like this:

float :: ParserT String m Number
float = lexeme floating <?> "float"
 
floating :: ParserT String m Number
floating = decimal >>= fractExponent

And decimal does not parse negative numbers, which is also mentioned in the comment.