确定要使用的正确数据容器在Haskell中可能有点棘手,因为我认为使用的2D网格应用程序UArray
是合适的.但是,据我所知,UArray
它不是foldable
(不是Data.Array.IArray
也不是Data.Array.Unboxed
)的实例.
是否有一个原因?我可以创建自己的辅助函数但是没有foldable
实例表明我可能不应该这样做.
我相信这样的实例是不可能的,因为它需要数组包含的数据类型中的额外约束,这不能用Foldable表示.在单遍历中,我确实为未装箱和可存储的矢量定义了MonoFoldable实例.
编辑:要清楚,我指的约束是,在所有的功能Data.Vector.Unbox
只有工作,如果被包含的值Vector
是一个实例Unbox
,而Foldable
要求foldMap
,foldr
等等,都是定义为所有可能的类型(如对于情况列表,盒装矢量等类型.Foldable
类型类没有办法说"所包含的值必须满足这些约束".有MonoFoldable
,有.