小编use*_*968的帖子

堆栈空间溢出ST monad

以下简短的Haskell程序用于计算文件中的项目列表.使用的版本foldl'工作正常,但使用的版本ST Monad给出了堆栈空间溢出消息.显然这里有一些空间泄漏,但我无法解决它.真正有趣的部分是ST monad应该进行就地更新,不应该让资源像这样增长,尽管这可能只涉及主内存而不是堆栈空间.有人能解释一下这里发生了什么吗?

import Control.Monad
import Data.List
import Control.Monad.ST
import Data.STRef

--count items using foldl' 
countFold :: Num a => [b] -> a
countFold = foldl' (\a _ -> a+1) 0

-- count items using the ST monad
-- derived fromt the sumST example on http://www.haskell.org/haskellwiki/Monad/ST
-- only using +1 instead of adding the values
countST :: Num a => [b] -> a
countST xs = runST $ do

    n <- newSTRef 0

    forM_ …
Run Code Online (Sandbox Code Playgroud)

monads haskell lazy-evaluation fold

3
推荐指数
1
解决办法
216
查看次数

标签 统计

fold ×1

haskell ×1

lazy-evaluation ×1

monads ×1