Don't infer CallStacks
authorEric Seidel <gridaphobe@gmail.com>
Mon, 4 Apr 2016 10:05:01 +0000 (12:05 +0200)
committerBen Gamari <ben@smart-cactus.org>
Mon, 4 Apr 2016 11:05:20 +0000 (13:05 +0200)
commit7407a66d5bd29aa011f5a4228c6e2b2f7f8ad3f8
treea79dbba0a8a0c3a7ecb12e1262487f0d876072c7
parent9b6820cdd6bac8b8346be48224627e3feefa9036
Don't infer CallStacks

We originally wanted CallStacks to be opt-in, but dealing with let
binders complicated things, forcing us to infer CallStacks. It turns
out that the inference is actually unnecessary though, we can let the
wanted CallStacks bubble up to the outer context by refusing to
quantify over them. Eventually they'll be solved from a given CallStack
or defaulted to the empty CallStack if they reach the top.

So this patch prevents GHC from quantifying over CallStacks, getting us
back to the original plan. There's a small ugliness to do with
PartialTypeSignatures, if the partial theta contains a CallStack
constraint, we *do* want to quantify over the CallStack; the user asked
us to!

Note that this means that

  foo :: _ => CallStack
  foo = getCallStack callStack

will be an *empty* CallStack, since we won't infer a CallStack for the
hole in the theta. I think this is the right move though, since we want
CallStacks to be opt-in. One can always write

  foo :: (HasCallStack, _) => CallStack
  foo = getCallStack callStack

to get the CallStack and still have GHC infer the rest of the theta.

Test Plan: ./validate

Reviewers: goldfire, simonpj, austin, hvr, bgamari

Reviewed By: simonpj, bgamari

Subscribers: bitemyapp, thomie

Projects: #ghc

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

GHC Trac Issues: #11573
23 files changed:
compiler/typecheck/TcBinds.hs
compiler/typecheck/TcEvidence.hs
compiler/typecheck/TcInteract.hs
compiler/typecheck/TcRnTypes.hs
compiler/typecheck/TcSimplify.hs
compiler/typecheck/TcType.hs
docs/users_guide/glasgow_exts.rst
libraries/base/GHC/Stack.hs
libraries/base/GHC/Stack/Types.hs
testsuite/tests/codeGen/should_run/cgrun059.stderr
testsuite/tests/concurrent/should_run/conc021.stderr
testsuite/tests/deSugar/should_run/T11601.stderr
testsuite/tests/ghci.debugger/scripts/break017.stdout
testsuite/tests/ghci.debugger/scripts/print033.stdout
testsuite/tests/ghci/scripts/T5557.stdout
testsuite/tests/ghci/scripts/ghci013.stdout
testsuite/tests/ghci/scripts/ghci046.stdout
testsuite/tests/ghci/scripts/ghci055.stdout
testsuite/tests/partial-sigs/should_compile/ExtraConstraints3.stderr
testsuite/tests/partial-sigs/should_fail/T10999.stderr
testsuite/tests/typecheck/should_run/T10845.hs
testsuite/tests/typecheck/should_run/T10845.stdout
testsuite/tests/typecheck/should_run/T8119.stdout