Безопасно ли использовать 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
?