Skip to content

Simplify fixIO

Now that we have noDuplicate#, I think we can make fixIO much simpler, and perhaps also faster, using something like what we do for ST.

data Res a = Res (# State# RealWorld, a #)

fixIO f = IO $ \s ->
  let Res r@(# _s', a #) = unIO (noDuplicate >> f a) s
  in r

If f forks an IO thread demanding a, the noDuplicate should ensure that the computation is not re-entered, and the thread should wait for the main computation to complete.

So I believe, anyway. The comment about eager blackholing here is a bit vague and doesn't give an example.

Trac metadata
Trac field Value
Version 8.0.1
Type Task
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Core Libraries
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