1. 12 Dec, 2014 1 commit
    • eir@cis.upenn.edu's avatar
      Rewrite `Coercible` solver · 0cc47eb9
      eir@cis.upenn.edu authored
      Summary:
      This is a rewrite of the algorithm to solve for Coercible "instances".
      
      A preliminary form of these ideas is at
      https://ghc.haskell.org/trac/ghc/wiki/Design/NewCoercibleSolver
      
      The basic idea here is that the `EqPred` constructor of `PredTree`
      now is parameterised by a new type `EqRel` (where
      `data EqRel = NomEq | ReprEq`). Thus, every equality constraint can
      now talk about nominal equality (the usual case) or representational
      equality (the `Coercible` case).
      
      This is a change from the previous
      behavior where `Coercible` was just considered a regular class with
      a special case in `matchClassInst`.
      
      Because of this change, representational equalities are now
      canonicalized just like nominal ones, allowing more equalities
      to be solved -- in particular, the case at the top of #9117.
      
      A knock-on effect is that the flattener must be aware of the
      choice of equality relation, because the inert set now stores
      both representational inert equalities alongside the nominal
      inert equalities. Of course, we can use representational equalities
      to rewrite only within another representational equality --
      thus the parameterization of the flattener.
      
      A nice side effect of this change is that I've introduced a new
      type `CtFlavour`, which tracks G vs. W vs. D, removing some ugliness
      in the flattener.
      
      This commit includes some refactoring as discussed on D546.
      It also removes the ability of Deriveds to rewrite Deriveds.
      
      This fixes bugs #9117 and #8984.
      
      Reviewers: simonpj, austin, nomeata
      
      Subscribers: carter, thomie
      
      Differential Revision: https://phabricator.haskell.org/D546
      
      GHC Trac Issues: #9117, #8984
      0cc47eb9
  2. 10 Dec, 2014 2 commits
  3. 26 Nov, 2014 1 commit
  4. 24 Nov, 2014 1 commit
  5. 21 Nov, 2014 3 commits
    • Merijn Verstraaten's avatar
      Add -fdefer-typed-holes flag which defers hole errors to runtime. · 2cc854b7
      Merijn Verstraaten authored
      
      
      Summary:
      As proposed by Richard on Trac. This patch adds a new flag -fdefer-typed-holes
      and changes the semantics of the -fno-warn-typed-holes flag.
      
      To summarise, by default GHC has typed holes enabled and produces a compile
      error when it encounters a typed hole.
      
      When -fdefer-type-errors OR -fdefer-typed-holes is enabled, hole errors are
      converted to warnings and result in runtime errors when evaluated.
      
      The warning flag -fwarn-typed-holes is on by default. Without -fdefer-type-errors
      or -fdefer-typed-holes this flag is a no-op, since typed holes are an error
      under these conditions. If either of the defer flags are enabled (converting
      typed hole errors into warnings) the -fno-warn-typed-holes flag disables the
      warnings. This means compilation silently succeeds and evaluating a hole will
      produce a runtime error.
      
      The rationale behind allowing typed holes warnings to be silenced is that tools
      like Syntastic for vim highlight warnings and hole warnings may be undesirable.
      Signed-off-by: Merijn Verstraaten's avatarMerijn Verstraaten <merijn@inconsistent.nl>
      
      Test Plan: validate
      
      Reviewers: austin, simonpj, thomie
      
      Reviewed By: simonpj, thomie
      
      Subscribers: Fuuzetsu, thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D442
      
      GHC Trac Issues: #9497
      
      Conflicts:
      	compiler/main/DynFlags.hs
      2cc854b7
    • Simon Peyton Jones's avatar
    • Simon Peyton Jones's avatar
      Test Trac #9569 · 230b013b
      Simon Peyton Jones authored
      230b013b
  6. 20 Nov, 2014 1 commit
  7. 12 Nov, 2014 2 commits
  8. 04 Nov, 2014 1 commit
  9. 24 Oct, 2014 1 commit
    • Edward Z. Yang's avatar
      Implementation of hsig (module signatures), per #9252 · aa479953
      Edward Z. Yang authored
      
      
      Summary:
      Module signatures, like hs-boot files, are Haskell modules which omit
      value definitions and contain only signatures.  This patchset implements
      one particular aspect of module signature, namely compiling them against
      a concrete implementation.  It works like this: when we compile an hsig
      file, we must be told (via the -sig-of flag) what module this signature
      is implementing.  The signature is compiled into an interface file which
      reexports precisely the entities mentioned in the signature file.  We also
      verify that the interface is compatible with the implementation.
      
      This feature is useful in a few situations:
      
          1. Like explicit import lists, signatures can be used to reduce
          sensitivity to upstream changes.  However, a signature can be defined
          once and then reused by many modules.
      
          2. Signatures can be used to quickly check if a new upstream version
          is compatible, by typechecking just the signatures and not the actual
          modules.
      
          3. A signature can be used to mediate separate modular development,
          where the signature is used as a placeholder for functionality which
          is loaded in later.  (This is only half useful at the moment, since
          typechecking against signatures without implementations is not implemented
          in this patchset.)
      
      Unlike hs-boot files, hsig files impose no performance overhead.
      
      This patchset punts on the type class instances (and type families) problem:
      instances simply leak from the implementation to the signature.  You can
      explicitly specify what instances you expect to have, and those will be checked,
      but you may get more instances than you asked for.  Our eventual plan is
      to allow hiding instances, but to consider all transitively reachable instances
      when considering overlap and soundness.
      
      ToDo: signature merging: when a module is provided by multiple signatures
      for the same base implementation, we should not consider this ambiguous.
      
      ToDo: at the moment, signatures do not constitute use-sites, so if you
      write a signature for a deprecated function, you won't get a warning
      when you compile the signature.
      
      Future work: The ability to feed in shaping information so that we can take
      advantage of more type equalities than might be immediately evident.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate and new tests
      
      Reviewers: simonpj, simonmar, hvr, austin
      
      Subscribers: simonmar, relrod, ezyang, carter, goldfire
      
      Differential Revision: https://phabricator.haskell.org/D130
      
      GHC Trac Issues: #9252
      aa479953
  10. 20 May, 2014 2 commits
  11. 07 Mar, 2014 2 commits
  12. 18 Feb, 2014 1 commit
  13. 03 Jan, 2014 1 commit
  14. 27 Nov, 2013 1 commit
  15. 26 Nov, 2013 1 commit
  16. 25 Nov, 2013 2 commits
  17. 25 Oct, 2013 1 commit
  18. 03 Oct, 2013 1 commit
  19. 13 Sep, 2013 2 commits
  20. 30 Aug, 2013 1 commit
  21. 15 May, 2013 3 commits
  22. 03 May, 2013 1 commit
  23. 12 Apr, 2013 1 commit
  24. 03 Mar, 2013 1 commit
  25. 11 Feb, 2013 1 commit
  26. 07 Feb, 2013 1 commit
    • ian@well-typed.com's avatar
      Pass the test name to the test options · effc8af9
      ian@well-typed.com authored
      This allows them to give framework failures.
      
      I also had to change how setTestOpts works. Now, rather than applying
      the options to the directory's "default options", it just stores the
      options to be applied for each test (i.e. once we know the test name).
      effc8af9
  27. 10 Jan, 2013 1 commit
  28. 02 Jan, 2013 1 commit
  29. 19 Dec, 2012 1 commit
  30. 07 Dec, 2012 1 commit