Core questions

Claus Reinke claus.reinke at talk21.com
Fri Jan 30 17:52:00 EST 2009


>Core types (in particular CoreExpr) are not instances of Show. They are
>instances of Outputable, which allows them to be pretty printed.
>However, this pretty printing is good to view the structure of the
>expression that the CoreExpr represents, but doesn't show the structure
>of the CoreExpr itself.

Not sure how practical this would be, but to get an idea of
the internal structure: if you can derive the SYB classes for
the Core types (which would generally be useful if you do lots
of traversals), you can easily define a generic show operation,
which would give you a lot of control over what kind of output
you'd like.

There is an example here:

    http://hackage.haskell.org/trac/ghc/wiki/GhcApiAstTraversals
    look for the showData code - straighforward base plus lots
    of exceptions to avoid some ideosyncrasies of GHC's internal
    representations (in particular, don't try to traverse parts of
    the structure that haven't been filled yet)

example output here

    http://hackage.haskell.org/packages/archive/ghc-syb/0.1.1/doc/html/GHC-SYB-Utils.html

hmm, I need to update that wiki page and the syb-utils package
page - the code has moved from there, to the syb and ghc-syb
packages, with proper maintainers. In particular, check the use
of standalone deriving to get the SYB class instances for GHC 
API types in package ghc-syb:

    http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ghc-syb

Iirc, the syb instances for Core were not included, if that hasn't 
changed yet, it would be a useful addition (for an old first stab, 
see the link at the bottom of that wiki page, CoreSynTraverse).

Claus



More information about the Glasgow-haskell-users mailing list