Hello everyone, On Thu, May 19, 2011 at 09:17, Simon Peyton-Jones <simonpj@microsoft.com> wrote:
Maybe you want
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. A little detail: I am traversing the LHsExprs inside a "TypecheckedSource". Since I mostly only need the HsExprs, I could also use a "ParsedModule". I have tried switching to ParsedModule. But whenever I use the PostTcType from a MatchGroup (within a FunBind) I get: panic! (the 'impossible' happened) (GHC version 6.12.3 for i386-unknown-linux): Evaluated the place holder for a PostTcType So, I guess the PostTcType is just not well defined within a ParsedModule. Thats why I use TypecheckedSource. On Thu, May 19, 2011 at 17:06, Ranjit Jhala <jhala@cs.ucsd.edu> wrote:
dsExpr :: HsExpr Id -> DsM CoreExpr
which "desugars" the source-level HsExpr into the CoreExpr.
Again, pretty close to what I need. The Monad is a little unexpected. I wrote a simple function: hsExpr2TypeDo :: HsExpr Id -> DsM Type hsExpr2TypeDo hsexpr = do let ioCoreE = dsExpr hsexpr x <- ioCoreE return (exprType x) (One could write that a little shorter, but that's not the point) My problem was, that I eventually need the Type from the DsMonad. Obviously, I cant just get the value out of a monad (that's against the idea of monads). So I was looking for a function that transforms: DsM a -> IO a. I found: initDs :: HscEnv -> Module -> GlobalRdrEnv -> TypeEnv -> DsM a -> IO (Messages, Maybe a) 1) For the HscEnv I use the result of getSession 2) Module is the result of ms_mod (getModSummary m)) However for the other parameters, I use empty values: 3) emptyGlobalRdrEnv 4) emptyTypeEnv This actually works (at least for the simple cases I have tested). But it seems wrong to me to pass two empty environments. Can I somehow obtain valid environments? Another question: Why is dsExpr monadic? What side effects could there possibly be? Thanks for all the answers, I'm sorry that I answer so late, I wanted to try everything out before responding. Thanks, Sven