[Haskell-cafe] STM, newArray, and a stack overflow?

Ketil Malde ketil at malde.org
Wed Mar 23 21:07:28 CET 2011


Bas van Dijk <v.dijk.bas at gmail.com> writes:

> sequence ms = foldr k (return []) ms
>     where
>       k m m' = do
>         x <- m
>         xs <- m'
>         return (x:xs)

Isn't this really a strictness problem with the STM monad?  If I
understand correctly, this forces xs before x can be examined. Something
to be fed to listArray should be able to be consumed lazily, shouldn't
it? 

> Note that I used a difference list to keep the list in the right
> order. Alternatively you can use a normal list (x:r) and reverse it
> when done. I'm not sure what's more efficient.

Hm, they will all need to allocate everything on the heap, no?
Shouldn't it be possible to create an array in a loop with only constant
memory overhead?

> Does this suggest we need the left folded sequencel?

Or unsafeInterleaveSTM?

It's interesting to see that newArray is using listArray under the
covers, I really want to initialize the array from a list - but
neither a listArray function nor the TArray constructor seem to be
available.

Thanks for helping out!

-k
-- 
If I haven't seen further, it is by standing in the footprints of giants



More information about the Haskell-Cafe mailing list