Revamp Backpack/hs-boot handling of type class signatures.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Thu, 5 Jan 2017 21:52:12 +0000 (13:52 -0800)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Wed, 11 Jan 2017 14:54:00 +0000 (06:54 -0800)
commit5def07fadd386a7a7c3a12963c0736529e377a74
tree1b2b5dbde6f6a227c4b2faa777080b4014fc4ee6
parente41c61fa7792d12ac7ffbacda7a5b3ba6ef2a267
Revamp Backpack/hs-boot handling of type class signatures.

Summary:
A basket of fixes and improvements:

- The permissible things that one can write in a type
  class definition in an hsig file has been reduced
  to encompass the following things:

    - Methods
    - Default method signatures (but NOT implementation)
    - MINIMAL pragma

  It is no longer necessary nor encouraged to specify
  that a method has a default if it is mentioned in
  a MINIMAL pragma; the MINIMAL pragma is assumed to
  provide the base truth as to what methods need to
  be implemented when writing instances of a type
  class.

- Handling of default method signatures in hsig was
  previously buggy, as these identifiers were not exported,
  so we now treat them similarly to DFuns.

- Default methods are merged, where methods with defaults
  override those without.

- MINIMAL pragmas are merged by ORing together pragmas.

- Matching has been relaxed: a method with a default can
  be used to fill a signature which did not declare the
  method as having a default, and a more relaxed MINIMAL
  pragma can be used (we check if the signature pragma
  implies the final implementation pragma, on the way
  fixing a bug with BooleanFormula.implies, see #13073)

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2925

GHC Trac Issues: #13041
20 files changed:
compiler/backpack/RnModIface.hs
compiler/basicTypes/OccName.hs
compiler/iface/TcIface.hs
compiler/typecheck/TcClassDcl.hs
compiler/typecheck/TcRnDriver.hs
compiler/utils/BooleanFormula.hs
testsuite/tests/backpack/should_compile/all.T
testsuite/tests/backpack/should_compile/bkp15.bkp
testsuite/tests/backpack/should_compile/bkp15.stderr
testsuite/tests/backpack/should_compile/bkp46.bkp [new file with mode: 0644]
testsuite/tests/backpack/should_compile/bkp46.stderr [new file with mode: 0644]
testsuite/tests/backpack/should_compile/bkp47.bkp [new file with mode: 0644]
testsuite/tests/backpack/should_compile/bkp47.stderr [new file with mode: 0644]
testsuite/tests/backpack/should_fail/all.T
testsuite/tests/backpack/should_fail/bkpfail39.bkp [new file with mode: 0644]
testsuite/tests/backpack/should_fail/bkpfail40.bkp [new file with mode: 0644]
testsuite/tests/backpack/should_fail/bkpfail40.stderr [new file with mode: 0644]
testsuite/tests/backpack/should_fail/bkpfail41.bkp [new file with mode: 0644]
testsuite/tests/backpack/should_fail/bkpfail41.stderr [new file with mode: 0644]
testsuite/tests/rename/should_fail/rnfail055.stderr