Here's a practical application of mfix:
mfix $ \threadId -> forkIO $ do
-- computation in forked thread
forkIO creates a new thread and returns its thread id. However, in order to access the returned thread id inside the forked computation, normally one would have to store it in a variable and then read from it inside the thread.mfix, by nature of its laziness, captures the return value of the function passed to it, and passes it to said function.