小编jon*_*dee的帖子

使用mapM/sequence被认为是好的做法吗?

考虑以下示例:

safeMapM f xs = safeMapM' xs []
    where safeMapM' []     acc = return $ reverse acc
          safeMapM' (x:xs) acc = do y <- f x
                                    safeMapM' xs (y:acc)

mapM return largelist      -- Causes stack space overflow on large lists
safeMapM return largelist  -- Seems to work fine
Run Code Online (Sandbox Code Playgroud)

mapM在大型列表上使用会导致堆栈空间溢出,而safeMapM似乎工作正常(使用GHC 7.6.1 -O2).但是我无法找到类似于safeMapMHaskell标准库的函数.

是否仍然被认为是使用mapM(或sequence就此而言)的良好做法?
如果是这样,尽管存在堆栈空间溢出的危险,为什么它被认为是一种好的做法?
如果不是您建议使用哪种替代方案?

haskell

16
推荐指数
2
解决办法
1116
查看次数

标签 统计

haskell ×1