1 A set of example programs for handling external core format.
3 In particular, typechecker and interpreter give a precise semantics.
9 The checker should work on most programs. Bugs I'm aware of:
10 1. There's some business I don't quite understand involving
11 coercions and subkinding (for details, see:
12 http://www.haskell.org/pipermail/cvs-ghc/2008-April/041949.html)
13 This shows up when typechecking a few of the library modules.
15 2. There's some weirdness involving funny character literals. This can
16 be fixed by writing a new lexer for chars rather than using Parsec's
17 built-in charLiteral lexer. But I haven't done that.
19 3. When typechecking the ghc-prim:GHC.PrimopWrappers library module,
20 some declarations seem to have the wrong type signature (due to
21 confusion between (forall (t::*) ...) and (forall (t::?) ...).)
22 This is because the ? kind is not expressible in Haskell.
24 Typechecking all the GHC libraries eats about a gig of heap and takes a
25 long time. I blame Parsec. (Someone who was bored, or understood happy
26 better than I do, could update the old happy parser, which is still in the
29 The interpreter is also memory-hungry, but works for small programs
30 that only do simple I/O (e.g., putStrLn is okay; not much more than that)
31 and don't use Doubles or arrays. For example: exp3_8, gen_regexps, queens,
32 primes, rfib, tak, wheel-sieve1, and wheel-sieve2, if modified so as not
33 to take input or arguments.
37 To run the checker and interpreter, you need to generate External Core
38 for all the base, integer and ghc-prim libraries. This can be done by
39 adding "-fext-core" to the GhcLibHcOpts in your build.mk file, then
40 running "make" under libraries/.
42 Then you need to edit Driver.hs and change "baseDir" to point to your GHC
45 Once you've done that:
46 1. make prims (to generate the primops file)
48 3. make nofibtest (to run the parser/checker on all nofib programs...
51 Tested with GHC 6.8.2. I make no claims of portability.