
| > 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