Вопрос знающим сей замечательный язык. Почему следующий код съедает всю память что находит и вешается? Я так понимаю, все дело в лени, но я не могу понять как ее тут побороть (в коде видны некоторые попытки в виде seq).
module Main where
import Control.Monad
import Control.Monad.ST
import Data.STRef
list = [0..10000]
res = runST $ do
r <- newSTRef (0 :: Int)
forM_ list $ \i -> do
forM_ list $ \j -> do
v <- readSTRef r
let v' = v `seq` v + 1
writeSTRef r v'
readSTRef r
main = do
putStr "Result: "
print res