@@ -37,6 +37,7 @@ import Data.List (List(..))
3737import Data.List as List
3838import Data.List.NonEmpty (NonEmptyList )
3939import Data.Maybe (Maybe (..), maybe )
40+ import Data.Number (fromString )
4041import Data.String (CodePoint , null , toLower )
4142import Data.String.CodePoints (codePointFromChar )
4243import Data.String.CodeUnits (singleton , toChar ) as CodeUnits
@@ -48,6 +49,7 @@ import Text.Parsing.Parser (ParseState(..), ParserT, consume, fail)
4849import Text.Parsing.Parser.Combinators (between , choice , notFollowedBy , option , sepBy , sepBy1 , skipMany , skipMany1 , try , tryRethrow , (<?>), (<??>))
4950import Text.Parsing.Parser.Pos (Position )
5051import Text.Parsing.Parser.String (char , noneOf , oneOf , satisfy , satisfyCodePoint , string )
52+ import Text.Parsing.Parser.String as Parser.String
5153
5254-- | A parser which returns the first token in the stream.
5355token :: forall m a . Monad m => (a -> Position ) -> ParserT (List a ) m a
@@ -608,8 +610,14 @@ makeTokenParser (LanguageDef languageDef) =
608610 natural = lexeme nat <?> " natural"
609611
610612 -- floats
613+
611614 floating :: ParserT String m Number
612- floating = decimal >>= fractExponent
615+ -- floating = decimal >>= fractExponent
616+ floating = do
617+ Tuple section _ <- Parser.String .match $ skipMany1 $ oneOf [' -' , ' .' , ' e' , ' 0' , ' 1' , ' 2' , ' 3' , ' 4' , ' 5' , ' 6' , ' 7' , ' 8' , ' 9' ]
618+ case fromString section of
619+ Nothing -> fail $ " Could not parse Number " <> section
620+ Just x -> pure x
613621
614622 natFloat :: ParserT String m (Either Int Number )
615623 natFloat = char ' 0' *> zeroNumFloat
0 commit comments