• Simon Peyton Jones's avatar
    [project @ 2005-01-27 10:44:00 by simonpj] · 508a505e
    Simon Peyton Jones authored
              Replace hi-boot files with hs-boot files
    This major commit completely re-organises the way that recursive modules
    are dealt with.
      * It should have NO EFFECT if you do not use recursive modules
      * It is a BREAKING CHANGE if you do
    ====== Warning: .hi-file format has changed, so if you are
    ======		updating into an existing HEAD build, you'll
    ======		need to make clean and re-make
    The details:  [documentation still to be done]
    * Recursive loops are now broken with Foo.hs-boot (or Foo.lhs-boot),
      not Foo.hi-boot
    * An hs-boot files is a proper source file.  It is compiled just like
      a regular Haskell source file:
    	ghc Foo.hs		generates Foo.hi, Foo.o
    	ghc Foo.hs-boot		generates Foo.hi-boot, Foo.o-boot
    * hs-boot files are precisely a subset of Haskell. In particular:
    	- they have the same import, export, and scoping rules
    	- errors (such as kind errors) in hs-boot files are checked
      You do *not* need to mention the "original" name of something in
      an hs-boot file, any more than you do in any other Haskell module.
    * The Foo.hi-boot file generated by compiling Foo.hs-boot is a machine-
      generated interface file, in precisely the same format as Foo.hi
    * When compiling Foo.hs, its exports are checked for compatibility with
      Foo.hi-boot (previously generated by compiling Foo.hs-boot)
    * The dependency analyser (ghc -M) knows about Foo.hs-boot files, and
      generates appropriate dependencies.  For regular source files it
    	Foo.o : Foo.hs
    	Foo.o : Baz.hi		-- Foo.hs imports Baz
    	Foo.o : Bog.hi-boot	-- Foo.hs source-imports Bog
      For a hs-boot file it generates similar dependencies
    	Bog.o-boot : Bog.hs-boot
    	Bog.o-boot : Nib.hi	-- Bog.hs-boto imports Nib
    * ghc -M is also enhanced to use the compilation manager dependency
      chasing, so that
    	ghc -M Main
      will usually do the job.  No need to enumerate all the source files.
    * The -c flag is no longer a "compiler mode". It simply means "omit the
      link step", and synonymous with -no-link.