我正在从事一个涉及从Haskell中的数组读取和写入的项目。我想将数组存储为不可变数组类型(因为我想尽可能避免可变性),所以我正在为MArray的freeze
和thaw
函数工作。我对应该如何使用这些功能感到困惑。这是我所拥有的(无法编译):
modifyBoard bd = freeze mbd
where
t = view falling st
ps = extractLocs t
mbd = runSTArray $ do
a <- thaw bd
mapM_ (\xy -> writeArray mbd xy (Filled t)) ps
return a
我不应该以这种方式使用数组,或者该如何解决?
最佳答案
它应该进行一些更改:
1.)修改已解冻的a
而不是未解冻的bd
。
2.)runSTArray
之后,无需重新冻结。您返回的结果已经冻结。
modifyBoard bd = mbd
where
t = view falling st
ps = extractLocs t
mbd = runSTArray $ do
a <- thaw bd
mapM_ (\xy -> writeArray a xy (Filled t)) ps
return a