在源modify
就被指出该操作将在地方,如果它是安全的话来进行,并会以其他方式修改载体的拷贝.
但是看代码modify
:
modify :: Vector v a => (forall s. Mutable v s a -> ST s ()) -> v a -> v a modify p = new . New.modify p . clone
它看起来clone
总是被调用(这对我来说很有意义,因为我认为它必须是对不可变向量的破坏性操作).
我误解了吗?如果没有,那么什么是clone
未调用的示例,以及如何Data.Vector
完成旁路?