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

是否有一个原因?我可以创建自己的辅助函数,但是缺少foldable实例表明也许我不应该这样做。

最佳答案

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

编辑:明确地说,我要说的约束是Data.Vector.Unbox中的所有函数仅在Vector包含的值是Unbox的实例的情况下才起作用,而Foldable则需要为所有foldMapfoldr等定义可能的类型(例如列表,装箱矢量等类型)。 Foldable类型类无法声明“所包含的值必须满足这些约束”。有了MonoFoldable,就可以了。

关于arrays - 为什么未装箱的数组不是可折叠的实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36322904/

10-13 08:39