[Haskell-cafe] GHC, odd concurrency space leak

Bertram Felgenhauer bertram.felgenhauer at googlemail.com
Sat Apr 17 19:36:31 EDT 2010


Bulat Ziganshin wrote:
> Hello Bertram,
> 
> Sunday, April 18, 2010, 12:11:05 AM, you wrote:
> 
> >     always a = -- let act = a >> act in act
> >         do
> >         _ <- a
> >         always a
> >     
> 
> > hinting at the real problem: 'always' actually creates a long chain of
> > actions instead of tying the knot.
> 
> can you explain it deeper? it's what i see: always definition is
> equivalent to
> 
>      always a = do a
>                    always a
> 
> what's the same as
> 
>      always a = a >> always a

This expands as

    always a = a >> always a
             = a >> a >> always a
             = a >> a >> a >> always a
            ...
where each >> application is represented by a newly allocated object
(or several, I have not looked at it in detail) on the heap.

With

    always a = let act = a >> act in act

there's only one >> application being allocated.

The principle is the same as with

    repeat x = x : repeat x

versus

    repeat x = let xs = x : xs in xs

HTH,

Bertram


More information about the Haskell-Cafe mailing list