
Ok, I pushed some patches to PathInfo for the parsec stuff. It now requires
parsec 3.1.0 (which is sort of a problem, but oh well).
I change the pToken function so that it tracks the error position better,
and updated showParseError to use that information better. I also added a
function:
p2u :: Parser a -> URLParser a
so now if you write:
test :: IO ()
test =
let segments = ["foo", "hi", "there", "world"] in
case parse testp (show segments) segments of
(Left e) -> putStrLn $ showParseError e
(Right r) -> print r
testp :: URLParser (Char, String, String)
testp =
do segment "foo"
st <- p2u (char 'h' >> char 'o')
sg <- anySegment
sg' <- anySegment
return (st,sg, sg')
You will get:
*Web.Routes.PathInfo> test
["foo","hi","there","world"] (segment 2 character 2):
unexpected "i"
expecting "o"
*Web.Routes.PathInfo>
This seems nice? The error tells you the segment and character offset in the
segment, and you can embed normal parsers from Text.Parsec.Char into the
parent parser and the errors in the Char parser give the correct character
offset.
One unresolved issue is if the sub-parser passed to p2u should be required
to consume the entire segment or not. I am thinking that it should be
required to consume the entire segment -- though the current code does not
work that way.
- jeremy
On Sat, Mar 27, 2010 at 9:17 AM, Chris Eidhof
There's probably a better way, but I guess I would write it in a similar way.
-chris
On 26 mrt 2010, at 23:04, Jeremy Shaw wrote:
Hello,
Is there some clean way to implement a function like:
c2s :: GenParser Char () a -> GenParser String () a
so that we can use Char parsers inside the URL Parser?
the trivial implementation would be something like:
http://moonpatio.com:8080/fastcgi/hpaste.fcgi/view?id=8965#a8965
but that does not do a very good job of reporting the position of parse errors.
- jeremy
On Fri, Mar 26, 2010 at 4:11 PM, Chris Eidhof
wrote: Hey, I've added a darcs patch (I hope it worked, I'm a darcs newbie) to switch the URL parser to parsec. This simplifies the code a lot. I've used String's (i.e. the URL path components) as tokens for the parser. What do you guys think?
I'm sorry I haven't been replying to the type-safe URL handling, I was busy with writing this week. The discussion has become quite large! I'll see if I can catch up somewhere this weekend.
-chris