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.  ReadP & Error Reporting (Hilco Wijbenga)


----------------------------------------------------------------------

Message: 1
Date: Fri, 9 Mar 2018 23:25:29 -0800
From: Hilco Wijbenga <hilco.wijbe...@gmail.com>
To: Haskell Beginners <beginners@haskell.org>
Subject: [Haskell-beginners] ReadP & Error Reporting
Message-ID:
        <CAE1pOi2Y5LojZ4Va78Rar=nsne0w0kzajdqyu8hupyirsrw...@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"

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


------------------------------

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 8
*****************************************

Reply via email to