Глядя на определение Monoid
, я заметил, что < a href="https://hackage.haskell.org/package/base/docs/Prelude.html#v:mconcat" rel="noreferrer">mconcat
имеет следующее определение (источник):
mconcat :: Monoid a => [a] -> a
mconcat = foldr mappend mempty
Почему подпись ограничивает это значение [a]
, а не более общим Foldable
?
mconcat' :: (Foldable t, Monoid a) => t a -> a
mconcat' = foldr mappend mempty
Это по историческим причинам? Или эта более общая реализация затруднит для конкретных типов предоставление оптимизированной версии, как в случае, например. для []
, который использует понимание списка (источник)?
foldr
работала только со списками iirc. - person Willem Van Onsem   schedule 09.02.2020