How about unsafeInterleaveIO? - You might have to experiment where to put it, but you shouldn't need the local unstrict definition. Because it doesn't violate type safety it is considered less heinous than unsafePerformIO.