为什么MVector不可折叠?
我可以理解为什么MVector类型(来自vector包)没有实例化Foldable类型类吗?我想人们经常需要迭代向量。我可以freeze它Data.Vector,然后进行迭代。但我讨厌改变这些东西,好像我们对String, Text, Bytestrings 等做得不够。
就我而言,我想打印每个元素。
回答
从可变向量读取需要在关联的 monad 中执行效果 -IO或ST s. 但是Foldable要求你能够给出一个纯粹的答案;如果有一个实例,我们至少必须能够实现
foldr :: (a -> b -> b) -> b -> MVector s a -> b
即使调用者选择了一个b没有提到IO或 的ST。哎呀!