Безопасно ли использовать unsafeThaw индексируемый распакованный вектор?

Я только что опубликовал этот код:

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 безопасно использовать здесь, потому что я только оттаиваю indexed версия xs, Тем не менее, мне пришло в голову, что распакованные векторы кортежей - например, эти пары индекс-значение - действительно хранятся как два распакованных вектора, один для индексов и один для значений. Следовательно, кажется вероятным, что indexed на самом деле вообще не будет генерировать новый вектор значений, а просто соединит его с индексным вектором. В этом случае, ST -modifying xsi может испортить xs,

После тестирования, похоже, этого не происходит. Могу ли я положиться на это, или я должен лучше использовать thaw ?

0 ответов

Другие вопросы по тегам