
Parser gurus, When you write a parser with a library like Parsec, do you typically type-check while parsing, or afterward in a separate pass? The latter is more modular, but it means labeling every element in the AST with the parser position so that you can give good error messages. Do you find the added modularity worth the hassle or just pack type-checking into the parser pass? Thanks, Greg

I use my type checking monad, which is separate from Parsec's monad.
So, I can't think of a way to type check during parsing in Parsec's monad.
Anyways, this is what I did:
data Expr = ... | At SourcePos Expr
SourcePos is from Parsec.
Basically, my parse actions will return (At pos e).
And I pass At pos e to typeCheck action.
typeCheck (At pos e) = do
put pos
-- typeCheck is in State monad.
-- in case of error, I'll pos <- get and report source position.
typeCheck e
typeCheck (Variable a) = do
...
check out this:
http://www.lipl.googlepages.com/index.html#source
On Fri, Dec 12, 2008 at 5:06 PM, Greg Fitzgerald
Parser gurus,
When you write a parser with a library like Parsec, do you typically type-check while parsing, or afterward in a separate pass? The latter is more modular, but it means labeling every element in the AST with the parser position so that you can give good error messages. Do you find the added modularity worth the hassle or just pack type-checking into the parser pass?
Thanks, Greg _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Greg Fitzgerald
-
sam lee