Fix incorrect ambiguity error on identically-named data constructors
authorSoham Chowdhury <chow.soham@gmail.com>
Thu, 11 May 2017 19:40:18 +0000 (15:40 -0400)
committerBen Gamari <ben@smart-cactus.org>
Thu, 11 May 2017 21:26:18 +0000 (17:26 -0400)
commit1381c142cd8d030f9997cdc206dcad006c028bbb
tree2275933e04448f0fe06e6a2fa8a9c719537587b5
parent6f999230e8f955ee61c470d34a02650165643f68
Fix incorrect ambiguity error on identically-named data constructors

Given multiple in-scope constructors with the same name, say `A`, and a
function of type `A -> Int`, say, the compiler reports both a "type `A`
is not in scope" and (incorrectly) an ambiguity error. The latter
shouldn't be there if `DataKinds` isn't enabled.

This issue was recommended to me by @mpickering as a suitable first
task, and the fix was also outlined in the original Trac ticket. It
involved a simple reordering of the steps taken in `lookup_demoted` in
`RnEnv.hs`. The fix is to make the `DataKinds` check happen earlier,
ensuring that the ambiguity check doesn't happen at all if we know the
constructors couldn't have been promoted.

Signed-off-by: Soham Chowdhury <chow.soham@gmail.com>
Reviewers: mpickering, austin, bgamari

Reviewed By: mpickering, bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #13568

Differential Revision: https://phabricator.haskell.org/D3547
18 files changed:
compiler/rename/RnEnv.hs
testsuite/tests/module/mod122.stderr
testsuite/tests/module/mod123.stderr
testsuite/tests/module/mod124.stderr
testsuite/tests/module/mod127.stderr
testsuite/tests/module/mod29.stderr
testsuite/tests/module/mod50.stderr
testsuite/tests/parser/should_fail/readFail001.stderr
testsuite/tests/rename/prog003/rename.prog003.stderr
testsuite/tests/rename/should_fail/T13568.hs [new file with mode: 0644]
testsuite/tests/rename/should_fail/T13568.stderr [new file with mode: 0644]
testsuite/tests/rename/should_fail/T13568a.hs [new file with mode: 0644]
testsuite/tests/rename/should_fail/T1595a.stderr
testsuite/tests/rename/should_fail/T5745.stderr
testsuite/tests/rename/should_fail/all.T
testsuite/tests/typecheck/should_fail/T1595.stderr
testsuite/tests/typecheck/should_fail/tcfail048.stderr
testsuite/tests/typecheck/should_fail/tcfail053.stderr