是否存在可变载体的就地映射函数?

use*_*074 1 haskell vector

如果我有一个可变向量(IOVector a例如类型),是否有类似地图的函数可以修改元素到位?

vector包提供了该modify功能,但这一次只有一个元素.我应该使用它还是有首选方法?

并且为了澄清,矢量的类型将在之前和之后相同.

Ale*_*lec 6

是的,modify如果你想修改元素,请使用.如果您发现自己经常修改所有内容,则可以定义mapModify如下.

import Data.Foldable (for_)
import qualified Data.Vector.Mutable as MV

mapModify :: (a -> a) -> IOVector a -> IO ()
mapModify f v = for_ [0 .. MV.length v - 1)] (MV.modify v f)
Run Code Online (Sandbox Code Playgroud)

也就是说,不断修改向量中的所有元素听起来像你可能最好使用不可变向量并使用常规映射它们fmap.如果该代码最终正确融合,则中间向量将永远不会实现.