+many :: forall a. Parser a -> Parser [a]
+many !p = Parser $!
+ do state <- get
+ let (# result, state' #) = many' state Seq.empty
+ put state'
+ return result
+ where
+ many' :: ParserState -> Seq a -> (# ParserResult [a], ParserState #)
+ many' !st !soFar
+ = case runState (runParser p) st of
+ (Success a, st') -> many' st' (soFar |> a)
+ (IllegalInput, _) -> (# Success (Fold.toList soFar), st #)
+ (ReachedEOF , _) -> if pstIsEOFFatal st then
+ (# ReachedEOF, st #)
+ else
+ (# Success (Fold.toList soFar), st #)