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

时间:2016-03-31 02:05:56

标签: arrays haskell

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

这有什么理由吗?我可以创建自己的帮助函数,但缺少foldable实例表明我可能不应该这样做。

1 个答案:

答案 0 :(得分:7)

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

编辑:要明确,我所指的约束是Data.Vector.Unbox中的所有函数仅在Vector包含的值是实例的情况下才有效Unbox,而Foldable要求为{em>所有可能的类型定义foldMapfoldr等(就像列表之类的情况一样) ,盒装载体等)。 Foldable类型类没有办法说明“包含的值必须满足这些约束”。使用MonoFoldable,有。