确定要使用的正确数据容器在Haskell中可能有点棘手,因为我认为使用UArray
的2D网格应用程序是合适的。但是,据我所知,UArray
不是foldable
的实例(不在Data.Array.IArray
或Data.Array.Unboxed
)。
这有什么理由吗?我可以创建自己的帮助函数,但缺少foldable
实例表明我可能不应该这样做。
答案 0 :(得分:7)
我认为这样的实例是不可能的,因为它需要数组包含的数据类型中的额外约束,这不能用Foldable表示。在单遍历中,我为未装箱和可存储的矢量定义了MonoFoldable实例。
编辑:要明确,我所指的约束是Data.Vector.Unbox
中的所有函数仅在Vector
包含的值是实例的情况下才有效Unbox
,而Foldable
要求为{em>所有可能的类型定义foldMap
,foldr
等(就像列表之类的情况一样) ,盒装载体等)。 Foldable
类型类没有办法说明“包含的值必须满足这些约束”。使用MonoFoldable
,有。