[Haskell-cafe] Parsec question: how to access parser state

Dimitry Golubovsky dimitry at golubovsky.org
Sun Mar 20 15:32:38 EST 2005


I am trying to develop a parser with the Parsec library. At some point I 
need to do something with parser state, say, convert it to a string.

I declared the type for the parser:

type TParser a = GenParser Token (FiniteMap String Declaration) a

The FiniteMap (which is the user state) is expected to be updated during 
parsing whus building some internal lookup table.

and in one of the parsing functions I want to call

show getState

assuming it will apply show to the FiniteMap and return some string of 

During compliation, I get:

     No instance for (Show (GenParser tok st st))
       arising from use of `show' at (file location)
     In the first argument of `xxxx', namely `(show getState)'

But GenParser is a newtype, not a data constructor, so attempt to write

instance Show (GenParser tok st t)

results in error message about missing constructor GenParser.

How could I extract actual user state from the result of getState?

The parser itself works as needed, but dealing with user state gets me 
in trouble.

Dimitry Golubovsky
Middletown, CT

More information about the Haskell-Cafe mailing list