在 Haskell 中找出要使用的正确数据容器可能有点棘手,对于我认为使用的 2D 网格应用程序UArray
会是合适的。然而,据我所知UArray
不是一个实例foldable
(不在Data.Array.IArray
nor Data.Array.Unboxed
).
是否有一个原因?我可以制作自己的辅助函数,但缺少foldable
实例表明也许我不应该这样做。
我认为这样的实例是不可能的,因为它需要对数组包含的数据类型进行额外的约束,而这不能用 Foldable 来表达。在 mono-traversable 中,我为未装箱和可存储的向量定义了 MonoFoldable 实例。
EDIT:要明确的是,我指的约束是所有函数Data.Vector.Unbox
仅当包含的值有效Vector
是一个实例Unbox
, 然而Foldable
要求foldMap
, foldr
等定义为all可能的类型(如列表、盒装向量等类型的情况)。没有办法与Foldable
typeclass 来声明“所包含的值必须满足这些约束”。和MonoFoldable
, 有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)