我在自定义数据类型observations :: [Obs]
中列出了大约10.000个观察结果,我希望将其聚合到统计对象:: Stat
中。折叠似乎是一个明智的选择。我发现自己有两种选择。
(1)定义一个函数accumulate :: Stat -> Obs -> Stat
,然后我将其折叠(严格地)。 foldl' accumulate acc0 observations
但是我的统计对象只包含Count和Sum等累加器,所以应该有一个monoidal结构。这给了我一个选择
(2)定义convert :: Obs -> Stat
并使用来自Data.Foldable的foldMap,如foldMap convert observations
。
我的问题 采用单线方式的原因是什么?性能?可维护性?其他