在Haskell中,找出要使用的正确数据容器可能会有些棘手,对于我的2D网格应用程序,我认为使用UArray
是合适的。但是,据我所知UArray
不是foldable
的实例(不在Data.Array.IArray
或Data.Array.Unboxed
中)。
是否有一个原因?我可以创建自己的辅助函数,但是缺少foldable
实例表明也许我不应该这样做。
最佳答案
我认为这样的实例是不可能的,因为它需要对数组包含的数据类型进行额外的约束,而这不能用Foldable表示。在单遍历中,我确实为未装箱和可存储的矢量定义了MonoFoldable实例。
编辑:明确地说,我要说的约束是Data.Vector.Unbox
中的所有函数仅在Vector
包含的值是Unbox
的实例的情况下才起作用,而Foldable
则需要为所有foldMap
,foldr
等定义可能的类型(例如列表,装箱矢量等类型)。 Foldable
类型类无法声明“所包含的值必须满足这些约束”。有了MonoFoldable
,就可以了。
关于arrays - 为什么未装箱的数组不是可折叠的实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36322904/