The call '(inline f)' reduces to f, but inline has a BuiltInRule that tries to inline f (if it has an unfolding) unconditionally The NOINLINE pragma arranges that inline only gets inlined (and hence eliminated) late in compilation, after the rule has had a good chance to fire.
Allow an ST computation to be deferred lazily. When passed an action of type ST s a, the action will only be performed when the value of a is demanded.
This function is identical to the normal unsafeInterleaveST, but is inlined and hence faster.
Note: This operation is highly unsafe, as it can introduce externally visible non-determinism into an ST action.
Just like unsafePerformIO, but we inline it. Big performance gains as it exposes lots of things to further inlining. Very unsafe. In particular, you should do no memory allocation inside an inlinePerformIO block. On Hugs this is just unsafePerformIO.