[Haskell-cafe] Type checking and locating token with Parsec

Joel Reymont joelr1 at gmail.com
Tue Apr 10 09:09:03 EDT 2007


Imagine a language where Num + Num yields a Num and Str + Num yields  
a Str but Num + Str should not be allowed.

I implemented parsing for such a language in OCaml with a yacc-based  
parser without an additional type-checking pass, entirely within the  
yacc grammar. I tried to take such an approach with Parsec but hit  
the roadblock with buildExpressionParser since it returns the same  
type as the token parser given to it.

Rather than have numerical expressions, string expressions, etc., as  
separate types, I simplified things down to a single expression type  
that holds my booleans, strings and numbers. I now need to implement  
type checking of my parsed AST.

The main issue is error reporting. I'm not sure where to get token  
location with Parsec and how to elegantly embed it in my AST.

Has anyone implemented type checking on top of a Parsec-based parser?

How did you locate your tokens?

	Thanks, Joel


More information about the Haskell-Cafe mailing list