
Simon Marlow
The raise closure is declared to be a THUNK:
https://phabricator.haskell.org/diffusion/GHC/browse/master/rts/Exception.cm...
Another example of this is when an asynchronous exception is thrown, and we update all the thunks/BLACKHOLEs pointed to by the update frames to point to new thunks (actually AP_STACK closures) representing the frozen state of evaluation of those thunks. For this, see rts/RaiseAsync.c.
This thread has answered a number of interesting questions. It would be a shame if these answers vanished into the abyss of the ghc-devs archives. Omer, do you think you could make sure that the discussion here is summarized in a Note (or ensure that the relevant notes reference one another, if they already exist)? Cheers, - Ben