Data.Vector.Unboxed
不是Foldable
的实例。编写适用于Foldable
实例以及未装箱矢量的函数的最佳方法是什么?例如,此版本的sum
适用于列表和带框的向量,但不能取消装箱:
sum :: (Foldable t, Num a) => t a -> a
sum = Foldable.foldl' (+) 0
答案 0 :(得分:11)
这听起来像mono-traversable可以为你做的事情。 F.E.它已包含sum
变体:
osum :: (MonoFoldable mono, Num (Element mono)) => mono -> Element mono
osum = ofoldl' (+) 0