在modify
的来源中,is stated如果可以安全地执行该操作,否则将修改该向量的副本。
但是请看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
如何完成旁路?