Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: ReadP & Error Reporting (David McBride) ---------------------------------------------------------------------- Message: 1 Date: Sat, 10 Mar 2018 16:04:01 -0500 From: David McBride <toa...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] ReadP & Error Reporting Message-ID: <CAN+Tr42xzYz1jN1s+MVbt_ypGBUgpWyS+Xo2iV=fzv+jocs...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" My first instinct is that no, there's not much you can do with this. You could wrap every combinator to return more detailed error messages, which might be *okay*. Or you could use the heavier parsing libraries and get all the error reporting for free. On Sat, Mar 10, 2018 at 2:25 AM, Hilco Wijbenga <hilco.wijbe...@gmail.com> wrote: > Hi all, > > I recently discovered ReadP (Text.ParserCombinators.ReadP) and I > wondered if I could use it to write simple parsers _with decent error > reporting_. > > Let's say I want to parse "[ab] [12]" (i.e. either 'a', or 'b', > followed by whitespace, followed by '1', or '2'). I believe something > like this does the trick: > > parse = do > name <- ReadP.choice [ReadP.char 'a', ReadP.char 'b'] > ReadP.skipMany1 (ReadP.satisfy (\ch -> ch == ' ' || ch == '\t')) > value <- ReadP.choice [ReadP.char '1', ReadP.char '2'] > return (name, value) > > How do you add error handling to this? Obviously, I could change the > signature to return an Either but I don't see how I "return" anything > other than Right. > > E.g., I would want to give a warning like "Expected 'a', or 'b'" if > anything other than 'a', or 'b' is used as first character. Similarly > for '1' and '2'. The obvious(?) way would be to add an error result as > the last option. The best I can come up with is adding ReadP.pfail to > the list of choices but that doesn't allow me to add a useful error. > Is ReadP simply not powerful enough for this? Or am I overlooking > something obvious? > > I did some googling and there is plenty about creating parsers with > parser combinators but I could not find anything about error handling. > > Cheers, > Hilco > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180310/7f21bdf6/attachment-0001.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 117, Issue 9 *****************************************