Use IP based CallStack in error and undefined

Authored by gridaphobe on Sep 2 2015, 3:22 AM.


Use IP based CallStack in error and undefined

This patch modifies error, undefined, and assertError to use
implicit call-stacks to provide better error messages to users.

There are a few knock-on effects:

  • GHC.Classes.IP is now wired-in so it can be used in the wired-in types for error and undefined.
  • TysPrim.tyVarList has been replaced with a new function TysPrim.mkTemplateTyVars. tyVarList made it easy to introduce subtle bugs when you need tyvars of different kinds. The naive

    ` tv1 = head $ tyVarList kind1 tv2 = head $ tyVarList kind2 `

    would result in tv1 and tv2 sharing a Unique, thus substitutions would be applied incorrectly, treating tv1 and tv2 as the same tyvar. mkTemplateTyVars avoids this pitfall by taking a list of kinds and producing a single tyvar of each kind.
  • The types GHC.SrcLoc.SrcLoc and GHC.Stack.CallStack now live in ghc-prim.
  • The type GHC.Exception.ErrorCall has a new constructor ErrorCallWithLocation that takes two Strings instead of one, the 2nd one being arbitrary metadata about the error (but usually the call-stack). A bi-directional pattern synonym ErrorCall continues to provide the old API.

Updates Cabal, array, and haddock submodules.

Reviewers: nh2, goldfire, simonpj, hvr, rwbarton, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, rodlogic, goldfire, maoe, simonmar, carter,
liyang, bgamari, thomie

Differential Revision:

GHC Trac Issues: Trac #5273


bgamariSep 2 2015, 6:21 AM
bgamariAug 25 2016, 1:39 PM
Differential Revision
D861: Use IP based CallStack in error and undefined
rGHCDIFFad26c54b86a8: Testsuite: refactoring only