为什么未装箱的数组不是可折叠的实例?

use*_*074 6 arrays haskell

确定要使用的正确数据容器在Haskell中可能有点棘手,因为我认为使用的2D网格应用程序UArray是合适的.但是,据我所知,UArray它不是foldable(不是Data.Array.IArray也不是Data.Array.Unboxed)的实例.

是否有一个原因?我可以创建自己的辅助函数但是没有foldable实例表明我可能不应该这样做.

Mic*_*man 8

我相信这样的实例是不可能的,因为它需要数组包含的数据类型中的额外约束,这不能用Foldable表示.在单遍历中,我确实为未装箱和可存储的矢量定义了MonoFoldable实例.

编辑:要清楚,我指的约束是,在所有的功能Data.Vector.Unbox只有工作,如果被包含的值Vector是一个实例Unbox,而Foldable要求foldMap,foldr等等,都是定义为所有可能的类型(如对于情况列表,盒装矢量等类型.Foldable类型类没有办法说"所包含的值必须满足这些约束".有MonoFoldable,有.