[Haskell-cafe] memory leak when using "forever"

Zoran Bosnjak zoran.bosnjak at via.si
Tue Oct 4 11:51:04 UTC 2016


Hello all,
can you please explain why does this simple program leak memory.
But, if I replace loop2 with loop1 (that is: without using "forever"),
then it does not leak.

Is this a problem in "forever" implementation or am I misusing this
function?
In the sources of base:
http://hackage.haskell.org/package/base-4.9.0.0/docs/src/Control.Monad.html#forever
... there is some mention of memory leak prevention, but it looks like
something is not right in this case.

import Control.Concurrent
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Trans.Reader
import Control.Monad.Trans.State

main :: IO ()
main = do
    --let loop1 = (liftIO $ threadDelay 1) >> loop1
    let loop2 = forever (liftIO $ threadDelay 1)

    _ <- runStateT (runReaderT loop2 'a') 'b'
    return ()

regards,
Zoran



More information about the Haskell-Cafe mailing list