Send Beginners mailing list submissions to
[email protected]
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
[email protected]
You can reach the person managing the list at
[email protected]
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 <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
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 <[email protected]>
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
> [email protected]
> 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
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 117, Issue 9
*****************************************