| > 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
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users