| > tcRnExpr :: HscEnv
| >         -> InteractiveContext
| >         -> LHsExpr RdrName
| >         -> IO (Messages, Maybe Type)
| >
| > from TcRnDriver?
| 
| 
| This is pretty close to what I need. Unfortunately, I have
| LhsExpr Id not RdrName.

Just to be clear
  LHsExpr RdrName    is just after parsing
  LHsExpr Name       is just after the renamer
  LHsExpr Id         is just after the type checker

So if you have an LHsExpr Id you have a fully typechecked expression.

In principle, then, it should be straightforward to write a function
        lhsExprType :: LHsExpr Id -> Type

The only problem is that HsSyn is big: there are many constructors.  
Nevertheless, it should be entirely straightforward. If someone wants to try, 
I'll gladly review.  I agree that it would be useful.  For example in an IDE 
you might want to select a sub-expression and see its type.

        Ranjit: if it'd be useful to you, you might be familiar enough by 
now...?

A hack is to desugar the expression to Core and use exprType, but that's very 
indirect and (as you observe) involves a monad for fresh names etc.

Let me know

| So, I guess the PostTcType is just not well defined within a ParsedModule.
| Thats why I use TypecheckedSource.

Correct.  As its name suggests PostTcType is only filled in post-typechecker.

Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to