在源代码中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
实现绕过?