I don't have experience solving this problem, but I've read a few horror stories from people who had state affect the results of parsing in Parsec.
Haskell's layout rules replace indentation levels with braces and semicolons; you could run an initial "tokenizing" parser that builds tokens including the indentation level of each line, then convert those tokens into the appropriate braces and semicolons (via a pure function) before feeding the results into the "real" Haskell parser. -- ryan On Mon, Apr 27, 2009 at 2:41 PM, Bas van Gijzel <neneko...@gmail.com> wrote: > Hello everyone, > > I'm doing a bachelor project focused on comparing parsers. One of the parser > libraries I'm using is Parsec (2) and I'm going to implement a very small > subset of haskell with it, with as most important feature the off-side rule > (indentation based parsing) used in function definitions and possibly in > where clauses. > > But I'm still a bit stuck on how to implement this cleanly. I tried to > search for some examples on blogs but I haven't found anything yet. As far > as I can see the way to go would be using getState and updateState methods > defined in Parsec.Prim and to use the methods in Parsec.Pos to compare the > difference in indendation for tokens. > > But I haven't completely wrapped my head around any state monad yet and I > don't understand Parsec enough yet to see how to use the methods Parsec.Pos > and state easily. Some examples or pointers to something to read would > really be helpful. > > Thanks in advance, > > Bas van Gijzel > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe