【发布时间】:2020-02-08 22:50:59
【问题描述】:
查看Monoid 的定义时,我注意到mconcat 具有以下定义(source):
mconcat :: Monoid a => [a] -> a
mconcat = foldr mappend mempty
为什么签名会将其限制为[a],而不是像这样更通用的Foldable?
mconcat' :: (Foldable t, Monoid a) => t a -> a
mconcat' = foldr mappend mempty
这是出于历史原因吗?或者这种更通用的实现是否会使特定类型更难提供它的优化版本,例如这种情况。对于使用列表理解的[] (source)?
【问题讨论】:
-
旧版本的
foldr仅适用于列表iirc。