jhala at cs.ucsd.edu
Sun Apr 24 03:26:55 CEST 2011
Hi Daniel --
that was a good lead, with a little digging around, I found
hscTcExpr :: GhcMonad m => HscEnv -> String -> m Type
which almost gets the job done, if only I could call it with
the appropriate HscEnv. The one I get using
getSession :: GhcMonad m => m HscEnv
appears rather impoverished, as it fails to find the usual
prelude names like
Not in scope: `undefined'
Not in scope: `error'
(though it does succeed on the expression "5" yielding the type)
"forall t_a4eW. (GHC.Num.Num t_a4eW) => t_a4eW"
Does anyone have a clue as to how to get a hold on an appropriate
environment? (I would have thought that the HscEnv obtained _after_
compiling some file "f" would populated with at least the names
needed to compile "f") that is, if I do:
cm0 <- compileToCoreSimplified f
env <- getSession
then the resulting "env" would suffice, but unfortunately thats not
On Apr 23, 2011, at 11:54 AM, Daniel Peebles wrote:
> I don't have an answer for you, but you might want to look at what :k does in ghci, since that needs to parse a type.
> On Sat, Apr 23, 2011 at 2:06 PM, Ranjit Jhala <jhala at cs.ucsd.edu> wrote:
> Hi all,
> can someone give me a hint as to the best way to parse a type from a string.
> Ideally, I'd like a function
> stringType :: String -> Maybe Type
> or possibly,
> stringType :: (GhcMonad m) => String -> m (Maybe Type)
> such that,
> stringType s == Just t
> if in the current GHC context the string s is the name of the type t. For
> example, I'd like:
> stringType "Int"
> to return a value equal to intTy (from TysWiredIn). My investigations have
> led me to
> parseType :: P (LHsType RdrName)
> and I suspect that with some work (mainly creating an appropriate PState,
> and mapping the name back, I can extract what I want, but I was wondering
> if there is some simpler route that I've overlooked.
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
More information about the Glasgow-haskell-users