功能通用于Foldable和Data.Vector.Unboxed

时间:2014-03-26 09:17:15

标签: haskell vector

Data.Vector.Unboxed不是Foldable的实例。编写适用于Foldable实例以及未装箱矢量的函数的最佳方法是什么?例如,此版本的sum适用于列表和带框的向量,但不能取消装箱:

sum :: (Foldable t, Num a) => t a -> a
sum = Foldable.foldl' (+) 0

1 个答案:

答案 0 :(得分:11)

这听起来像mono-traversable可以为你做的事情。 F.E.它已包含sum变体:

osum :: (MonoFoldable mono, Num (Element mono)) => mono -> Element mono
osum = ofoldl' (+) 0