1. 09 Mar, 2005 2 commits
  2. 23 Feb, 2005 2 commits
    • simonpj's avatar
      [project @ 2005-02-23 13:46:43 by simonpj] · 766c499e
      simonpj authored
      ---------------------------------------------
      	Make type synonyms uniform with data types
      	so far as infix operators are concerned
      	---------------------------------------------
      
      	Merge to STABLE
      
      
      This allows
      
      	type (a :+: b) c d = ...
      
      which was prevented before by accident.
      
      I've also documented the fact that classes can be infix;
      and arranged that class constraints in types can be in infix form.
      	f :: (a :=: b) => ....
      766c499e
    • simonmar's avatar
      [project @ 2005-02-23 10:57:52 by simonmar] · aafc20f8
      simonmar authored
      Move include of <string.h> later
      aafc20f8
  3. 16 Feb, 2005 1 commit
    • simonmar's avatar
      [project @ 2005-02-16 10:50:23 by simonmar] · 4553e941
      simonmar authored
      Recommend using -M rather than -H to increase the heap size.
      
      On Windows, there's an arbitrary limit of 256Mb due to the way memory
      is allocated, which is the primary cause of running out of heap.  On
      Unix, the heap size is unlimited by default.
      4553e941
  4. 27 Jan, 2005 1 commit
    • simonpj's avatar
      [project @ 2005-01-27 10:44:00 by simonpj] · 508a505e
      simonpj 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
        generates
      	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.
      508a505e
  5. 18 Jan, 2005 1 commit
    • simonpj's avatar
      [project @ 2005-01-18 12:18:11 by simonpj] · ac80e0de
      simonpj authored
      ------------------------
          Reorganisation of hi-boot files
        	------------------------
      
      The main point of this commit is to arrange that in the Compilation
      Manager's dependendency graph, hi-boot files are proper nodes. This
      is important to make sure that we compile everything in the right
      order.  It's a step towards hs-boot files.
      
      * The fundamental change is that CompManager.ModSummary has a new
        field, ms_boot :: IsBootInterface
      
        I also tided up CompManager a bit.  No change to the Basic Plan.
      
        ModSummary is now exported abstractly from CompManager (was concrete)
      
      * Hi-boot files now have import declarations.  The idea is they are
        compulsory, so that the dependency analyser can find them
      
      * I changed an invariant: the Compilation Manager used to ensure that
        hscMain was given a HomePackageTable only for the modules 'below' the
        one being compiled.  This was really only important for instances and
        rules, and it was a bit inconvenient.  So I moved the filter to the
        compiler itself: see HscTypes.hptInstances and hptRules.
      
      * Module Packages.hs now defines
          data PackageIdH
          = HomePackage 		-- The "home" package is the package
       				-- curently being compiled
          | ExtPackage PackageId	-- An "external" package is any other package
      
         It was just a Maybe type before, so this makes it a bit clearer.
      
      * I tried to add a bit better location info to the IfM monad, so that
        errors in interfaces come with a slightly more helpful error message.
        See the if_loc field in TcRnTypes --- and follow-on consequences
      
      * Changed Either to Maybes.MaybeErr in a couple of places (more perspicuous)
      ac80e0de
  6. 14 Jan, 2005 1 commit
    • simonmar's avatar
      [project @ 2005-01-14 17:57:41 by simonmar] · c464eda3
      simonmar authored
      HEADS UP!  You now need to use an up to date Happy from CVS to build
      GHC.  Happy version 1.15 will be released shortly.
      
      Replace the slow hacked up String-based GetImports with one based on
      the real Haskell parser.  This requires a new addition to Happy to
      support parsing partial files.  We now avoid reading each source file
      off the disk twice: once to get its module name and imports, and again
      to parse it.  Instead we just slurp it once, and cache the StringBuffer.
      
      This should result in improved startup times for ghc --make,
      especially when there are lots of source files.
      c464eda3
  7. 05 Jan, 2005 1 commit
  8. 23 Dec, 2004 1 commit
  9. 29 Nov, 2004 1 commit
  10. 26 Nov, 2004 1 commit
    • simonmar's avatar
      [project @ 2004-11-26 16:19:45 by simonmar] · ef5b4b14
      simonmar authored
      Further integration with the new package story.  GHC now supports
      pretty much everything in the package proposal.
      
        - GHC now works in terms of PackageIds (<pkg>-<version>) rather than
          just package names.  You can still specify package names without
          versions on the command line, as long as the name is unambiguous.
      
        - GHC understands hidden/exposed modules in a package, and will refuse
          to import a hidden module.  Also, the hidden/eposed status of packages
          is taken into account.
      
        - I had to remove the old package syntax from ghc-pkg, backwards
          compatibility isn't really practical.
      
        - All the package.conf.in files have been rewritten in the new syntax,
          and contain a complete list of modules in the package.  I've set all
          the versions to 1.0 for now - please check your package(s) and fix the
          version number & other info appropriately.
      
        - New options:
      
      	-hide-package P    sets the expose flag on package P to False
      	-ignore-package P  unregisters P for this compilation
      
      	For comparison, -package P sets the expose flag on package P
              to True, and also causes P to be linked in eagerly.
      
              -package-name is no longer officially supported.  Unofficially, it's
      	a synonym for -ignore-package, which has more or less the same effect
      	as -package-name used to.
      
      	Note that a package may be hidden and yet still be linked into
      	the program, by virtue of being a dependency of some other package.
      	To completely remove a package from the compiler's internal database,
              use -ignore-package.
      
      	The compiler will complain if any two packages in the
              transitive closure of exposed packages contain the same
              module.
      
      	You *must* use -ignore-package P when compiling modules for
              package P, if package P (or an older version of P) is already
              registered.  The compiler will helpfully complain if you don't.
      	The fptools build system does this.
      
         - Note: the Cabal library won't work yet.  It still thinks GHC uses
           the old package config syntax.
      
      Internal changes/cleanups:
      
         - The ModuleName type has gone away.  Modules are now just (a
           newtype of) FastStrings, and don't contain any package information.
           All the package-related knowledge is in DynFlags, which is passed
           down to where it is needed.
      
         - DynFlags manipulation has been cleaned up somewhat: there are no
           global variables holding DynFlags any more, instead the DynFlags
           are passed around properly.
      
         - There are a few less global variables in GHC.  Lots more are
           scheduled for removal.
      
         - -i is now a dynamic flag, as are all the package-related flags (but
           using them in {-# OPTIONS #-} is Officially Not Recommended).
      
         - make -j now appears to work under fptools/libraries/.  Probably
           wouldn't take much to get it working for a whole build.
      ef5b4b14
  11. 24 Nov, 2004 1 commit
    • simonmar's avatar
      [project @ 2004-11-24 13:03:26 by simonmar] · c1a7d1a6
      simonmar authored
      Update s/r conflict total after Ross added four more.  The total
      according to the comment is currently one more than the real number,
      so one of them must have gone away.  At some point we should track
      down which one.
      c1a7d1a6
  12. 23 Nov, 2004 1 commit
  13. 01 Oct, 2004 2 commits
    • simonpj's avatar
      [project @ 2004-10-01 16:39:26 by simonpj] · fc6e8220
      simonpj authored
      Allow kind signatures in GADT data type declarations
      fc6e8220
    • simonpj's avatar
      [project @ 2004-10-01 13:42:04 by simonpj] · 837824d2
      simonpj authored
      ------------------------------------
      	Simplify the treatment of newtypes
      	Complete hi-boot file consistency checking
      	------------------------------------
      
      In the representation of types, newtypes used to have a special constructor
      all to themselves, very like TyConApp, called NewTcApp.    The trouble is
      that means we have to *know* when a newtype is a newtype, and in an hi-boot
      context we may not -- the data type might be declared as
      	data T
      in the hi-boot file, but as
      	newtype T = ...
      in the source file.  In GHCi, which accumulates stuff from multiple compiles,
      this makes a difference.
      
      So I've nuked NewTcApp.  Newtypes are represented using TyConApps again. This
      turned out to reduce the total amount of code, and simplify the Type data type,
      which is all to the good.
      
      
      This commit also fixes a few things in the hi-boot consistency checking
      stuff.
      837824d2
  14. 30 Sep, 2004 1 commit
    • simonpj's avatar
      [project @ 2004-09-30 10:35:15 by simonpj] · 23f40f0e
      simonpj authored
      ------------------------------------
      	Add Generalised Algebraic Data Types
      	------------------------------------
      
      This rather big commit adds support for GADTs.  For example,
      
          data Term a where
       	  Lit :: Int -> Term Int
      	  App :: Term (a->b) -> Term a -> Term b
      	  If  :: Term Bool -> Term a -> Term a
      	  ..etc..
      
          eval :: Term a -> a
          eval (Lit i) = i
          eval (App a b) = eval a (eval b)
          eval (If p q r) | eval p    = eval q
          		    | otherwise = eval r
      
      
      Lots and lots of of related changes throughout the compiler to make
      this fit nicely.
      
      One important change, only loosely related to GADTs, is that skolem
      constants in the typechecker are genuinely immutable and constant, so
      we often get better error messages from the type checker.  See
      TcType.TcTyVarDetails.
      
      There's a new module types/Unify.lhs, which has purely-functional
      unification and matching for Type. This is used both in the typechecker
      (for type refinement of GADTs) and in Core Lint (also for type refinement).
      23f40f0e
  15. 28 Sep, 2004 1 commit
  16. 10 Sep, 2004 1 commit
  17. 07 Sep, 2004 1 commit
  18. 13 Aug, 2004 1 commit
  19. 19 Jul, 2004 1 commit
    • simonpj's avatar
      [project @ 2004-07-19 11:29:34 by simonpj] · c92ad297
      simonpj authored
      Template Haskell improvements
      
      a) Make '() and '[] work.
      b) Add tupleTypeName, tupleDataName
      b) Try to improve error message for (lack of) existential data constructors in TH
      c92ad297
  20. 23 Jun, 2004 1 commit
    • ross's avatar
      [project @ 2004-06-23 22:43:20 by ross] · 8000acbf
      ross authored
      arrow notation fixes (problems reported bu John Hughes):
      
      * allow an infixexp (exp0) to the left of -<.  This adds 4 more
        shift/reduce conflicts, because it makes if/lambda/let/case/proc
        before -< ambiguous.  This is the same sort of thing as
        "if x then y else z + 1", and as there shifting does the right thing.
      
      * described the grammar more precisely
      
      * fixed an example
      
      merge to STABLE
      8000acbf
  21. 02 Jun, 2004 1 commit
    • simonpj's avatar
      [project @ 2004-06-02 08:25:10 by simonpj] · 729a6eb1
      simonpj authored
      -----------------------------------------------
             Record whether data constructors are declared infix
      	-----------------------------------------------
      
      This allows us to generate the InfixC form in Template Hasekll.
      And for 'deriving' Read and Show, we now read and parse the infix
      form iff the constructor was declared infix, rather than just if
      it does not have the default fixity (as before).
      
      IfaceSyn changes slightly, so that IfaceConDecl can record their
      fixity, so there are trivial changes scattered about, and
      you'll need to recompile everything.
      
      In TysWiredIn I took the opportunity to simplify pcDataCon slightly,
      by eliminating the unused Theta argument.
      729a6eb1
  22. 07 May, 2004 1 commit
  23. 05 Apr, 2004 3 commits
  24. 02 Apr, 2004 1 commit
    • simonpj's avatar
      [project @ 2004-04-02 16:46:57 by simonpj] · 40888e1d
      simonpj authored
      Extend the "newtype deriving" feature a little bit more
      (at the request of Wolfgang Jeltsch)
      
      Here's the example:
          class C a b
          instance C [a] Char
          newtype T = T Char deriving( C [a] )
      
      Perfectly sensible, and no reason it should not work.
      Fixing this required me to generalise the abstract syntax of
      a 'deriving' item, hence the non-local effects.
      40888e1d
  25. 17 Mar, 2004 1 commit
    • simonpj's avatar
      [project @ 2004-03-17 13:59:06 by simonpj] · af5a2151
      simonpj authored
      ------------------------
      	More newtype clearing up
      	------------------------
      
      * Change the representation of TyCons so that it accurately reflects
      	* data     (0 or more constrs)
      	* newtype  (1 constr)
      	* abstract (unknown)
        Replaces DataConDetails and AlgTyConFlavour with AlgTyConRhs
      
      * Add IfaceSyn.IfaceConDecls, a kind of stripped-down analogue
        of AlgTyConRhs
      
      * Move NewOrData from BasicTypes to HsDecl (it's now an HsSyn thing)
      
      * Arrange that Type.newTypeRep and splitRecNewType_maybe unwrap just
        one layer of new-type-ness, leaving the caller to recurse.
      
        This still leaves typeRep and repType in Type.lhs; these functions
        are still vaguely disturbing and probably should get some attention.
      
      Lots of knock-on changes.  Fixes bug in ds054.
      af5a2151
  26. 08 Mar, 2004 1 commit
  27. 24 Feb, 2004 2 commits
    • simonpj's avatar
      [project @ 2004-02-24 16:44:26 by simonpj] · 51f116ef
      simonpj authored
      ---------------------------------------
            Allow constructors to be specified in hi-boot files
      	  ---------------------------------------
      51f116ef
    • simonmar's avatar
      [project @ 2004-02-24 10:34:21 by simonmar] · 42be1de4
      simonmar authored
      Fix line-comments.  The problem was that eg.
      
         --->
      
      at the beginning of a line was matched by the line-comment rule,
      because the varsym rule isn't valid at this point (we're in the bol
      state).  Fix is to split the line-comment regex into two:
      
      "--"\-* [^$symbol] .*			;
      "--"\-* / { atEOL }			;
      
      so a sequence of dashes on its own is only treated as a comment if
      we're at the end of the line (or file).  Otherwise the dashes must be
      followed by a non-symbol character.
      42be1de4
  28. 15 Feb, 2004 1 commit
  29. 02 Feb, 2004 1 commit
  30. 23 Jan, 2004 1 commit
  31. 30 Dec, 2003 1 commit
    • simonpj's avatar
      [project @ 2003-12-30 16:29:17 by simonpj] · f714e6b6
      simonpj authored
      ----------------------------
              Re-do kind inference (again)
      	----------------------------
      
         [WARNING: interface file binary representation has
         (as usual) changed slightly; recompile your libraries!]
      
      Inspired by the lambda-cube, for some time GHC has used
      	type Kind = Type
      That is, kinds were represented by the same data type as types.
      
      But GHC also supports unboxed types and unboxed tuples, and these
      complicate the kind system by requiring a sub-kind relationship.
      Notably, an unboxed tuple is acceptable as the *result* of a
      function but not as an *argument*.  So we have the following setup:
      
      		 ?
      		/ \
      	       /   \
      	      ??   (#)
      	     /  \
                  *   #
      
      where	*    [LiftedTypeKind]   means a lifted type
      	#    [UnliftedTypeKind] means an unlifted type
      	(#)  [UbxTupleKind]     means unboxed tuple
      	??   [ArgTypeKind]      is the lub of *,#
      	?    [OpenTypeKind]	means any type at all
      
      In particular:
      
        error :: forall a:?. String -> a
        (->)  :: ?? -> ? -> *
        (\(x::t) -> ...)	Here t::?? (i.e. not unboxed tuple)
      
      All this has beome rather difficult to accommodate with Kind=Type, so this
      commit splits the two.
      
        * Kind is a distinct type, defined in types/Kind.lhs
      
        * IfaceType.IfaceKind disappears: we just re-use Kind.Kind
      
        * TcUnify.unifyKind is a distinct unifier for kinds
      
        * TyCon no longer needs KindCon and SuperKindCon variants
      
        * TcUnify.zapExpectedType takes an expected Kind now, so that
          in TcPat.tcMonoPatBndr we can express that the bound variable
          must have an argTypeKind (??).
      
      The big change is really that kind inference is much more systematic and
      well behaved.  In particular, a kind variable can unify only with a
      "simple kind", which is built from * and (->).  This deals neatly
      with awkward questions about how we can combine sub-kinding with type
      inference.
      
      Lots of small consequential changes, especially to the kind-checking
      plumbing in TcTyClsDecls.  (We played a bit fast and loose before, and
      now we have to be more honest, in particular about how kind inference
      works for type synonyms.  They can have kinds like (* -> #), so
      
      This cures two long-standing SourceForge bugs
      
      * 753777 (tcfail115.hs), which used erroneously to pass,
        but crashed in the code generator
            type T a = Int -> (# Int, Int #)
            f :: T a -> T a
            f t = \x -> case t x of r -> r
      
      * 753780 (tc167.hs), which used erroneously to fail
            f :: (->) Int# Int#
      
      
      Still, the result is not entirely satisfactory.  In particular
      
      * The error message from tcfail115 is pretty obscure
      
      * SourceForge bug 807249 (Instance match failure on openTypeKind)
        is not fixed.  Alas.
      f714e6b6
  32. 16 Dec, 2003 1 commit
    • simonpj's avatar
      [project @ 2003-12-16 16:24:55 by simonpj] · cb2be98a
      simonpj authored
      --------------------
      	Towards type splices
      	--------------------
      
      Starts the move to supporting type splices, by making
      HsExpr.HsSplice a separate type of its own, and adding
      HsSpliceTy constructor to HsType.
      cb2be98a
  33. 10 Dec, 2003 2 commits