Question about Haskell AST
Christiaan Baaij
christiaan.baaij at gmail.com
Tue Feb 8 10:46:58 CET 2011
Does the following code help you out? (Do note it's for the GHC 6.12.* API)
It just uses the the default GHC driver, meaning you don't have to separately call the desugerar, simplifier, etc.
It's what I use for my CλaSH tool.
Cheers, Christiaan
-- External Modules
import qualified GHC.Paths
-- GHC API
import qualified DynFlags
import qualified GHC
import qualified HscTypes
-- | Loads the given files and returns the Core Bindings
loadBindings ::
[FilePath] -> -- ^ Files to load
IO [(CoreSyn.CoreBndr, CoreSyn.CoreExpr)] -- ^ Bindings
loadBindings fileNames = do
GHC.defaultErrorHandler DynFlags.defaultDynFlags $
GHC.runGhc (Just GHC.Paths.libdir) $ do
-- Some dynflags trickery.. otherwise they don't get loaded properly
dflags <- GHC.getSessionDynFlags
GHC.setSessionDynFlags dflags
-- Run the default GHC driver
coreModules <- mapM GHC.compileToCoreSimplified fileNames
-- Extract and flatten bindings from the modules
let bindings = concatMap (CoreSyn.flattenBinds . HscTypes.cm_binds) coreModules
return bindings
On Jan 10, 2011, at 6:21 PM, Jane Ren wrote:
> Hi,
>
> I need to be able to take a piece of Haskell source code and get an simplified, typed, intermediate representation of the AST, which means I need to use compiler/coreSyn/CoreSyn.lhs
>
> So I'm first trying to get the desguaredModule of the source code with
> ...
> modSum <- getModSummary $ mkModuleName "..."
> p <- parseModule modSum
> t <- typecheckModule p
> d <- desugarModule t
>
> Now I'm really stuck on figuring out how to connect the variable d of type desugaredModule to compiler/coreSyn/CoreSyn.lhs to get Expr patterns like App, Let, Case, etc.
>
> Also, is it correct to get the deguaredModule first? At least CoreSyn.lhs seems to suggest this.
>
> Any suggestions would be greatly apprecia
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
More information about the Glasgow-haskell-users
mailing list