
4 Jan
2021
4 Jan
'21
1:22 a.m.
Another issue is that (as the recently expanded documentation shows), an `interruptible` foreign call is not actually an "interruptible operation" in the sense used in Control.Exception. To make it so, the caller has to manually call `allowInterrupt`. Or, in the single-threaded runtime, has to call `interruptibleYield`. So ... they have to make a foreign call to `rts_isThreaded` and then use the result to figure out how to deliver a potential exception. What a terrible user experience! Why not bake the "deliver exceptions" part into the FFI code for `interruptible` calls? This stuff has been documented so very recently (not in any released GHC) that I don't imagine much will break if we make these changes.