不安全是否安全了解索引的未装箱矢量?

时间:2016-11-13 20:21:35

标签: arrays haskell mutability referential-transparency st-monad

I just posted this code:

import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Algorithms.Intro as VAlgo

argSort :: (Ord a, VU.Unbox a) => VU.Vector a -> VU.Vector Int
argSort xs = VU.map fst $ VU.create $ do
    xsi <- VU.unsafeThaw $ VU.indexed xs
    VAlgo.sortBy (comparing snd) xsi
    return xsi

我的理由是unsafeThaw在这里使用是安全的,因为我只解冻了xs indexed版本。然而,然后我发现元组的未装箱的向量 - 就像这里的索引值对 - 实际上存储为两个未装箱的向量,一个用于索引,一个用于值。因此,ST根本不会实际生成新的值向量似乎是合理的,而只是将其与索引向量耦合。在这种情况下,xsi - 修改xs可能会弄乱True

经过测试,这似乎并没有发生。 我可以依赖于此,还是应该更好地使用indexed

0 个答案:

没有答案