Some stack-safe sequence combinators #130
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of the change
Combinators dealing with sequences, such as
many1
,manyTill
,sepBy
, etc. are stack-unsafe. When given a long enough input, they will overflow the stack.Data.List
offers similar general combinatorsmany
andsome
, and provides a patch for this problem in the form of stack-safe counterparts -manyRec
andsomeRec
respectively, - which are made stack-safe at the expense of an additionalMonadRec
constraint.Following this pattern, this PR adds stack-safe counterparts for some of the parser combinators - specifically,
sepEndByRec
,sepEndBy1Rec
,manyTillRec
, andmany1TillRec
.These are not all the sequence combinators exported from
Text.Parsing.Parser.Combinators
, but only those that we needed for our purposes at myslave dungeounday job. I figured I'd contribute them back to the library since it's very low effort to do so.If the High Counsil pleases, I can take it upon myself to develop similar counterparts for the other sequence combinators.
Checklist:
Linked any existing issues or proposals that this pull request should closeUpdated or added relevant documentation in the README and/or documentation directory