Fix #10045
authorThomas Winant <thomas.winant@cs.kuleuven.be>
Wed, 18 Feb 2015 16:13:37 +0000 (10:13 -0600)
committerAustin Seipp <austin@well-typed.com>
Thu, 19 Feb 2015 01:18:49 +0000 (19:18 -0600)
commite9d72cefeda243d5962d0615fe7ad22ff615d134
tree05313ea9536546845836852da4a1f54475cadfa5
parent35d464bf54373cbe37e1e3310cc6a95f63f257f0
Fix #10045

Summary:
SPJ's solution is to only bring the `TcId` (which includes the type) of a
binder into scope when it had a non-partial type signature.

Take care of this by only storing the `TcId` in `TcSigInfo` of non-partial
type signatures, hence the change to `sig_poly_id :: Maybe TcId`. Only in case
of a `Just` will we bring the `TcId` in scope. We still need to know the name
of the binder, even when it has a partial type signature, so add a `sig_name
:: Name` field. The field `sig_partial :: Bool` is no longer necessary, so
reimplement `isPartialSig` in terms of `sig_poly_id`.

Note that the new test case fails, but not because of a panic, but because the
`Num a` constraint is missing. Adding an extra-constraints wildcard to
`copy`'s signature would fix it.

Test Plan: validate

Reviewers: simonpj, austin

Reviewed By: simonpj

Subscribers: thomie

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

GHC Trac Issues: #10045
compiler/typecheck/TcBinds.hs
compiler/typecheck/TcClassDcl.hs
compiler/typecheck/TcInstDcls.hs
compiler/typecheck/TcPat.hs
testsuite/tests/partial-sigs/should_fail/Trac10045.hs [new file with mode: 0644]
testsuite/tests/partial-sigs/should_fail/Trac10045.stderr [new file with mode: 0644]
testsuite/tests/partial-sigs/should_fail/all.T