Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: no-pred-ty

Sep 09, 2011

  1. Max Bolingbroke

    Move exprIsConApp_maybe to CoreSubst so we can use it in VSO. Fix VSO…

    … bug with unlifted let bindings.
  2. simonpj

    Comments, and rename FactTuple to ConstraintTuple


Sep 07, 2011

  1. simonpj

    Nuke isCertainlyPredReprTy

  2. simonpj

    Comments and layout

  3. simonpj

    Add Constraint as a legitmiate tycon in Kinds

  4. simonpj

    ConstraintKind -> ConstraintKinds

  5. simonpj

    Minor refactoring of dsLCoercion, plus comments


Sep 06, 2011

  1. Max Bolingbroke

    Implement -XConstraintKind

    Basically as documented in,
    this patch adds a new kind Constraint such that:
      Show :: * -> Constraint
      (?x::Int) :: Constraint
      (Int ~ a) :: Constraint
    And you can write *any* type with kind Constraint to the left of (=>):
    even if that type is a type synonym, type variable, indexed type or so on.
    The following (somewhat related) changes are also made:
     1. We now box equality evidence. This is required because we want
        to give (Int ~ a) the *lifted* kind Constraint
     2. For similar reasons, implicit parameters can now only be of
        a lifted kind. (?x::Int#) => ty is now ruled out
     3. Implicit parameter constraints are now allowed in superclasses
        and instance contexts (this just falls out as OK with the new
        constraint solver)
    Internally the following major changes were made:
     1. There is now no PredTy in the Type data type. Instead
        GHC checks the kind of a type to figure out if it is a predicate
     2. There is now no AClass TyThing: we represent classes as TyThings
        just as a ATyCon (classes had TyCons anyway)
     3. What used to be (~) is now pretty-printed as (~#). The box
        constructor EqBox :: (a ~# b) -> (a ~ b)
     4. The type LCoercion is used internally in the constraint solver
        and type checker to represent coercions with free variables
        of type (a ~ b) rather than (a ~# b)
  2. Max Bolingbroke

    Remove the "Ghastly special case" from dataTcOccs

    This special case was introduced in 228c474 to
    'Fix problem with :i for (:)' but the associated Note
    doesn't explain why (:) deserves this treatment but not
    e.g. Left and Right.
    Removing the special case does not break anything
    (including :i (:)) so I guess this is no longer necessary.
  3. Max Bolingbroke

    Zap demand information if the simplifier reduces the arity: fixes Cor…

    …eLint failure
  4. Max Bolingbroke

    Fix handing of CoVars in SetLevels: it wasn't renaming occurrences of…

    … case-bound coercion variabes
  5. Max Bolingbroke

    There are no predicate kinds in external core: remove Keq

  6. Max Bolingbroke

    Remove bogus isCoercionKind function and its sole use

  7. Erik de Castro Lopo

    Add missing import (fixes #5460).

    authored simonmar committed
  8. Joachim Breitner

    Add s390x to list of supported architectures

    authored simonmar committed
  9. Simon Marlow

    fix GhcUnregisterised default, and add kfreebsdgnu to OsSupportsGhci

  10. Simon Marlow

    fix the eager-blackholing check, which I inadvertently broke in

    1c2f895 (symptom was broken
    biographical profiling, see #5451).

Sep 05, 2011

  1. simonpj

    Minor wording change

  2. simonpj

    Fix Trac #5455: be a bit more selective in mkSelectorBinds

    See Note [mkSelectorBinds]
  3. simonpj

    Eliminate isHiBootTyCon in favour of isAbstractTyCon

    Fixes Trac #5456, which was a buglet arising from
      commit de9b85f
      Author: Simon Peyton Jones <>
      Date:   Fri Sep 2 17:43:53 2011 +0100
        Export a tiny bit more info with AbstractTyCon (fixes #5424)
    It only shows up when compiling with -O0!
  4. simonpj

    Link the de-synonym change to ticket Trac #5458

  5. simonpj

    Fix two bugs in caes-floating (fixes Trac #5453)

    The problem is documented in the ticket.  The patch
    does two things
    1. Make exprOkForSpeculation return False for a non-exhaustive case
    2. In SetLevels.lvlExpr, look at the *result* scrutinee, not the
       *input* scrutinee, when testing for evaluated-ness
  6. simonpj

    Comments only

  7. simonpj

    De-synonym the types of the abtracted term variables in SpecConstr

    This was making Text.PrettyPrint.HughesPJ give a lint-bug
    when the libraries were compiled with -O2.
    It's all caused by phantom type synonyms (which are, generally
    speaking, a royal pain).  The fix is simple, but a bit brutal.
    See Note [Free type variables of the qvar types].

Sep 02, 2011

  1. simonpj

    Export a tiny bit more info with AbstractTyCon (fixes #5424)

    When we compile -O0 we put type constructors in the interface file
    without their data constructors -- an AbstractTyCon.  But in a
    client module, to give good pattern-match exhaustiveness warnings,
    we need to know the difference between a data type and a newtype.
    (The latter can be coerced to another type, but a data type can't.)
    See Note [Pruning dead case alternatives] in Unify.
    Because we weren't conveying this info, we were getting bogus
    warnings about inexhaustive patterm matches with GADTs, and
    (confusingly) these warnings woudl come and go depending on
    whether you were compiling with -O.
    This patch makes AbstractTyCon carry a flag indicating whether
    the type constructor is "distinct"; two distinct TyCons cannot
    be coerced into eachother (except by unsafeCoerce, in which case
    all bets are off).
    HEADS UP: interface file format changes slightly, so you need
    to make clean.
  2. simonpj

    Backtrack on the wierd special case of data family exports

    I had second thoughts on the "data family export" question.
    Rather than add a wierd special case it seems better to be
    simple and consistent.  So this patch
     * Reverts to the simple behaviour:
         module M where { ... }
       exports only what is defined in M, ie NOT any
       imported data families.
       See Note [Exports of data families] in RnNames
    * Documents this behaviour in the user manual, and clarifies
      what was there before.
  3. simonpj

    Merge branch 'master' of

  4. simonpj

    Some minor wibbling in printing source locations

    I found that an imported instance was getting printed with <no
    location info>.  Fixing this pushed me into a bit more refactoring
    than I intended, but it's all small aesthetic stuff, nothing
    fundamental.  Caused some error message to change as a result.
    I removed pprDefnLoc from the GHC API because it doesn't seem to be
    used.  Name.pprNamedefnLoc and pprDefinedAt are probably more useful
  5. simonpj

    Two bugs in rnExports (fixes Trac #5445)

    When constructing export lists, data families pose an awkward problem,
    documented in Note [Exports of data families] in RnNames.  Consider
    	   module M where
                 import X( D )
                 data instance D Int = M1 | M2
    Here M exports M1 and M2, obviously, but does it export D?  It would
    not usually do so, but if we don't then no one can import M selectively
    like this:
               import M( D(M1,M2) )
    So we compromise and export D too.  But I made two mistakes
    a) Didn't check for conflicts between the extra export of X.D
       and any other exports called "D"
    b) Did the extra export for imported things too, not just ones defined
       in this module (ie made the compromise apply much more widely than
    This made Programatica (a complex project) break in an obscure
    way; (b) caused an export conflict, (a) meant that the conflict
    was not spotted, which in turn caused later chaos.
    Anyway the fix is easy, and is documented in the Note.
  6. simonpj

    More debug info on provenance with -dppr-debug

  7. simonpj

    Make Convert.thRdrName give a decent source locations (fixes Trac #5434)

    thRdrName is used to construct *binders*, and some of them are
    Exact RdrNames, so we need to give them a decent source location.
  8. simonpj

    Fix a buglet in reification of tuples (fixes Trac #5452)

  9. simonpj

    Increase the "context stack depth" to 200 (from 20)

    This parameter controls the allowed depth of reasoning in the
    type constraint solver.  Perfectly well-behaved programs can
    use deep stacks, and 20 is obviously too small.  (Indeed, if
    you don't have UndecidableInstances, the constraint solver
    is supposed to terminate, so no limit should be needed.)
    Responding to Trac #5395 this patch increases the default
    to 200.

Sep 01, 2011

  1. igfoo

    Add a flag -fno-ghci-history

    Allows you to turn off loading/storing the GHCi command history from/to
    the ~/.ghc/ghci_history file.
  2. simonpj

    Wibble to fix of Trac #5439: deal with the error-recovery case

    Even if we are recovering from a typecheck error, we should still do
    the right thing for the "closed" flag.  Otherwise we get an assert
    failure, and potentially different behaviour when the user fixes
    the original type error.
Something went wrong with that request. Please try again.