wiki:ExternalCore

Version 6 (modified by guest, 7 years ago) (diff)

--

The ExternalCore type

The ExternalCore data type is used by GHC to communicate code represented in the Core data type with the outside world. It comes with an external syntax, a parser, a pretty printer, and code to convert between Core and External Core. Unfortunately, External Core has not been widely used, and the code has bit-rotted. The recent changes in Core to use System FC have exacerbated the problem. This page documents the process of getting External Core and Core back in sync.

Relevant files

The main source files related to External Core:

Other files that contain some reference to External Core or are otherwise relevant:

Documentation

Design decisions

  • Probably want to represent all data types as GADTs, even if they can be represented in Haskell 98 form, so that we only have one representation.
  • TODO more!

Tasks

  • Define an external text representation for External Core (which will probably be simply a minor modification of the old format)
  • Update the External Core data type to be compatible with the current Core data type. (mostly done)
  • Update PprExternalCore.lhs to print stuff that LexCore and ParserCore can understand. (mostly done)
  • Update MkExternalCore.lhs to support both the current Core and the new External Core. (mostly done)
  • Update LexCore.hs, ParserCore.y, and ParserCoreUtils.hs to support the new data type and external syntax.
  • Convert the current External Core documentation (in LaTeX) into a chapter (in XML) in the User's Guide.

Naming issues

Since External Core was introduced, the IfaceSyn data type has changed. Originally (including in 6.6), it represented external name references using IfaceExtName. Now (in Darcs HEAD), it uses Name instead. This change leaves the External Core parser with the responsibility of generating a Unique for each name it encounters.

Miscellaneous notes

  • The LaTeX documentation describes PrimOps? in some detail. This information is now in the library documentation, so it is probably not needed in the External Core chapter.