(This is best suited for comments on the answer to the radiator, but it takes too long.)
MonadFix instances must adhere to several laws . One of them remains compressed / addictive:
mfix (\x -> a >>= \y -> fxy) = a >>= \y -> mfix (\x -> fxy)
This law allows you to rewrite your expression as
mfix (\xs -> uniform >>= \x -> return (x:xs)) = uniform >>= \x -> mfix (\xs -> return (x:xs)) = uniform >>= \x -> mfix (return . (x :))
Using another law, the purity of mfix (return . h) = return (fix h) , we can simplify it further
= uniform >>= \x -> return (fix (x :))
and using standard monad laws and rewriting fix (x :) as repeat x
= liftM (\x -> fix (x :)) uniform = liftM repeat uniform
Therefore, the result is really one uniform call, and then just the same value is repeated endlessly.
source share