Skip to content

Add print stacktrace to exception handler in runtime system

main :: IO ()
main = do
  someIO
  putStrLn "hello world"

someIO :: IO ()
someIO = ioError $ IOError Nothing IllegalOperation "a" "b" Nothing Nothing

This code prints the following

exception: a: illegal operation (b)

I think there is something in the runtime system which takes this exception and prints this text to the terminal. I will call this the "runtime exception handler" (for i don't know any better).

main :: IO ()
main = do
  ex <- try someIO :: IO (Either IOException ())
  case ex of
    Left e -> error (show e)
    Right _ -> putStrLn "hello world"

someIO :: IO ()
someIO = ioError $ IOError Nothing IllegalOperation "a" "b" Nothing Nothing

output:

exception: a: illegal operation (b)
CallStack (from HasCallStack):
  error, called at src/Main.hs:10:15 in main:Main

Now i use an explicit handler in my code and show the stacktrace with error. Could this handler be moved into the RTS so that i can stacktraces with exceptions just like with error?

I think this issue is related to, but not the same as #12096 (closed) Because "Attach stacktrace information to SomeException" -- whatever there is being attached right now (with lts-10.2 ghc 8.2.2) is good enough to provide the information, it's just the print option in the handler that seems to be missing.

Trac metadata
Trac field Value
Version 8.2.2
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information