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: On Fri, Dec 12, 2008 at 5:06 PM, Greg Fitzgerald <garious at gmail.com> wrote: > Parser > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe at haskell.org > >