Comments (4)
Just to make sure I'm not being dense - the parser p
in your example could never succeed with any input, correct?
from parsec.
Correct. I guess the example is a bit contrived, but my point is that p
should report correctly why it failed. In this instance, many1 $ char 'a'
is tried first and succeeds, then the input stream is rewound back to the beginning and then char 'b'
is tried which fails because it didn't find an 'b'. But the error message does not indicate that.
Here's another example:
variable :: Parser String
variable = do
x <- lookAhead (many1 letter)
if x == "return"
then fail "'return' is a reserved keyword"
else string x
Then parse p "" "return"
currently fails with
Left (line 1, column 7):
unexpected end of input
expecting letter
With my patch it gives the following error:
Left (line 1, column 1):
return is a reserved keyword
The problem is that many1 letter
succeeds having consumed the 6 letters of "returned". But it also generates an message about the end of input when many1
tries to apply letter
for a seventh time. Then the input stream is rewound by lookAhead
, and fail
is called on the beginning of input. But parserBind
ignores that error because it prefers the error that occurred later in the input. I claim that this error is irrelevant here because we have rewound the input stream.
from parsec.
Oh, yes, I agree with you that your patch makes sense. I just wanted to make sure I understood your example.
If at all possible lookAhead
should not update our parser-state when it succeeds.
from parsec.
Fixed in f7faa2a.
from parsec.
Related Issues (20)
- Documentation regarding updatePosChar does not match the function's behaviour
- tokenise comments
- add a parameter to makeTokenParser to specify options for treating space by lexeme
- `updatePosChar` does not increment line number like doccumentation says
- GHC 9.2.1 release? HOT 2
- Which unfoldM is meant in "unfoldM uncons gives the [t] corresponding to the stream"?
- Compatibility with mtl-2.3 HOT 2
- string function not working correctly with (<|>) when the head of the strings are the same but their tails are not HOT 2
- Link in readme broken HOT 1
- How to handle include?
- Parsec crashes HOT 2
- cabal build -c 'mtl == 2.2.1' fails because of Safe Haskell HOT 7
- Generate syntax highlighting files HOT 1
- Parameterized enclosing for char and string literals HOT 1
- The recent fix of the `(>>=)` memory leak seems to cause an enormous performance degradation. HOT 22
- Track consumed token count in ParserState (and ParseError)
- Haddock combinator 'many' is applied to a parser that accepts an empty string. HOT 5
- End of Line Parser HOT 2
- `anyToken` breaks source position state HOT 1
- notFollowedBy parser always succeeds HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from parsec.