[GHC] #9943: Replace "error" with "errorWithStackTrace" from GHC.Stack in base libs

GHC ghc-devs at haskell.org
Wed Dec 31 07:24:22 UTC 2014


#9943: Replace "error" with "errorWithStackTrace" from GHC.Stack in base libs
-------------------------------------+-------------------------------------
        Reporter:  spacekitteh       |                   Owner:
            Type:  task              |  spacekitteh
        Priority:  normal            |                  Status:  new
       Component:  Core Libraries    |               Milestone:  7.12.1
      Resolution:                    |                 Version:
Operating System:  Unknown/Multiple  |                Keywords:
 Type of failure:  None/Unknown      |            Architecture:
      Blocked By:                    |  Unknown/Multiple
 Related Tickets:                    |               Test Case:
                                     |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by hvr):

 Btw, it's not as simple as just set `error = errorWithStackTrace`; there
 needs to be a way to recover the string passed to `error` w/o the
 additional stack-trace from the `ErrorCall` exception value (which
 currently provides the originally passed `error`-message as its payload).

 {{{#!hs
 -- |This is thrown when the user calls 'error'. The @String@ is the
 -- argument given to 'error'.
 newtype ErrorCall = ErrorCall String
     deriving (Eq, Ord, Typeable)

 instance Exception ErrorCall

 instance Show ErrorCall where
     showsPrec _ (ErrorCall err) = showString err
 }}}

 See also this short conversation for some ideas:

 {{{
 hvr> carter: btw, was my concern regarding modifying the payload of the
 ErrorCall exception ever addressed?
 carter> nopeee! :)
 carter> maybe we expose a pattern synonym as the constructor name
 carter> and have the real constructor have an extra field for the trace?
 hvr> could work
 carter> so show will still render the full mess
 carter> but everyone's old code wont break
 carter> because unless youre explicity catching it
 carter> it ends up just being showed right?
 carter> error "fix me"
 carter> hvr: pattern synonyms dont need to be eneabled in the use sites
 right?
 carter> hvr: err, the only reason for that change would be backwards
 compat right?
 hvr> carter: well, actually it's a nice property to be able to recover the
 exact string you pass to 'error'
 carter> hvr: i wasn't arguing against it :)
 hvr> carter: regardless of backward compat
 carter> ok
 carter> so breaking change to make it have two args?
 carter> or hide it with patternsyn?
 carter> or wait a year and try again?
 hvr> carter: you've got one year to figure out the perfect way :)
 carter> fineeeee
 carter> solution: break everything
 hvr> carter: otoh, maybe by then we may have some other facility which
 makes this redundant
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9943#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list