now that i think about it: is it true that unsafeInterleaveIO ma = pure (unsafePerformIO ma) ? it sure seems like that's what the implementation is doing ah, not quite, it's using the input RealWorld instead of creating one out of thin air How does it matter that it's still using the original RealWorld?