Fix warnings in TcTyDecls
[ghc-hetmet.git] / utils / ext-core / README
index 9afd388..6a0dc13 100644 (file)
@@ -1,29 +1,48 @@
 A set of example programs for handling external core format.
 
 In particular, typechecker and interpreter give a precise semantics.
 A set of example programs for handling external core format.
 
 In particular, typechecker and interpreter give a precise semantics.
-
-To build, run "make".
 ---------------------
 ---------------------
-tjc April 2008:
+tjc April/May 2008:
 
 
-==== Notes ====
+==== Documentation ====
 
 
-The checker should work on most programs. Bugs I'm aware of:
-1. GHC generates some questionable coercion applications involving
-   partially-applied function arrows (for details, see:
-   http://www.haskell.org/pipermail/cvs-ghc/2008-April/041949.html)
-   This shows up when typechecking a few of the library modules.
+Documentation for the External Core format lives under docs/ext-core in the
+GHC tree. If you are building from HEAD, do not rely on the version of the
+External Core documentation that lives in haskell.org -- it is obsolete!
 
 
-2. There's some weirdness involving funny character literals. This can
+==== Notes ====
+
+The checker should work on most programs. Bugs (and infelicities) 
+I'm aware of:
+   
+1. There's some weirdness involving funny character literals. This can
    be fixed by writing a new lexer for chars rather than using Parsec's
    built-in charLiteral lexer. But I haven't done that.
 
    be fixed by writing a new lexer for chars rather than using Parsec's
    built-in charLiteral lexer. But I haven't done that.
 
+2. The test driver attempts to find module dependencies automatically,
+   but it's slow. You can turn it off with the "-n" flag to the driver,
+   and specify all dependencies on the command line (you have to include
+   standard library dependencies too.)
+     * It would help to cache dependency info for standard libraries
+       in a file, or something, but that's future work.
+
+3. To avoid implementing some of the I/O primitives and foreign calls,
+   I use a gross hack involving replacing certain standard library
+   modules with simplified versions (found under lib/) that depend on
+   fake "primops" that the Core interpreter implements. This makes it
+   difficult (if not impossible) to load optimized versions of standard
+   libraries right now. Fixing this is future work too.
+
 Typechecking all the GHC libraries eats about a gig of heap and takes a
 long time. I blame Parsec. (Someone who was bored, or understood happy
 better than I do, could update the old happy parser, which is still in the
 repo.)
 
 Typechecking all the GHC libraries eats about a gig of heap and takes a
 long time. I blame Parsec. (Someone who was bored, or understood happy
 better than I do, could update the old happy parser, which is still in the
 repo.)
 
-The interpreter is not working yet.
+The interpreter is also memory-hungry, but works for small programs
+that only do simple I/O (e.g., putStrLn is okay; not much more than that)
+and don't use Doubles or arrays. For example: exp3_8, gen_regexps, queens,
+primes, rfib, tak, wheel-sieve1, and wheel-sieve2, if modified so as not
+to take input or arguments.
 
 ==== Building ====
 
 
 ==== Building ====
 
@@ -35,11 +54,20 @@ running "make" under libraries/.
 Then you need to edit Driver.hs and change "baseDir" to point to your GHC
 libraries directory.
 
 Then you need to edit Driver.hs and change "baseDir" to point to your GHC
 libraries directory.
 
-Once you've done that:
-1. make prims (to generate the primops file)
-2. make
-3. make nofibtest (to run the parser/checker on all nofib programs...
+Once you've done that, the ext-core library can be built in the usual
+Cabal manner:
+1. runhaskell Setup.lhs configure
+2. runhaskell Setup.lhs build
+3. runhaskell Setup.lhs install
+
+Then, you can build the example Driver program with:
+  ghc -package extcore Driver.hs -o Driver
+
+And finally, you can use the included Makefile to run tests:
+
+  make nofibtest (to run the parser/checker on all nofib programs...
    for example.)
    for example.)
+  make libtest (to typecheck all the libraries)
 
 Tested with GHC 6.8.2. I make no claims of portability.
 
 
 Tested with GHC 6.8.2. I make no claims of portability.