I've been playing with Text.Parsers.Frisby to see how it stacks against
other options and, while it's been great so far, I am finding that I
can't encode a grammar where what's acceptable depends on what's already
been parsed in some nontrivial way. To take a simple example, imagine a
grammar where the only lower-case letters that are acceptable are those
where their upper-case equivalent occurred earlier in the text.

In Parsec I'd code this sort of thing as,

nextChar =
    do allowed <- getState
       char <- oneOf $ ['A'..'Z'] ++ allowed
       updateState (union [toLower char])
       return char

test = runParser (many1 nextChar) [] ""

Is this supposed to not be possible in Frisby, or (quite likely) am I
missing something that allows me to? I've thought about things like
trying to fmap further calls to apply runPeg to rest, but I've not
figured out a trick that will actually work.

-- Mark

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to