小编Zaf*_*sur的帖子

Haskell ST Monad:没有 (MArray (STArray s) Int (ST s1)) 的实例

我最近一两个月一直在学习Haskell,最近解决了这个编码问题。额外的挑战是在没有额外空间和线性时间内完成任务,我认为这不可能以纯函数的方式完成,所以很自然地我发现了 ST monad,我认为这将是一个很好的机会了解更多信息。不管怎样,这是我写的代码:

\n\n
module FindDuplicates where\n\nimport Control.Monad (foldM)\nimport Control.Monad.ST\nimport Data.Array.ST\n\nxs = [4,3,2,7,8,2,3,1] :: [Int]\n\nfindDuplicates :: [Int] -> ST s [Int]\nfindDuplicates xs = do\n    arr <- newListArray (1, length xs) xs :: ST s (STArray s Int Int)\n\n    let go :: [Int] -> Int -> ST s [Int]\n        go acc i = do x <- abs <$> readArray arr i\n                      y <- readArray arr x\n                      if y < 0\n                          then return (x:acc)\n                          else do writeArray arr x (-y)\n …
Run Code Online (Sandbox Code Playgroud)

monads haskell starray st-monad

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

标签 统计

haskell ×1

monads ×1

st-monad ×1

starray ×1