为什么 Sum 和 Product 不是函子

Why Sum and Product aren't Functors

Sum 在 base 4.7.0.2 中定义没有 Functor 实例。为什么?

例如,semigroups 包中定义的类型有 FunctorApplicativeMonad,例如Min,其行为类似于 Identity` - 对我来说很有意义。

我认为这些不是 Functor 实例的主要原因是您尚未提交代码审查以使其成为实例。您可以在 Trac, then submit a code review on Phabricator. The preferred Phabricator workflow (using Arcanist), along with other details, can be found here.

提交工单

在这样做的同时,您可能还应该使它们成为 ApplicativeMonad 的实例。您还应该分别在 Data.FoldableData.Traversable 中为它们添加 FoldableTraversable 实例。

如果你想让我猜猜为什么没有其他人这样做:

虽然 SumProduct 可以容纳任何类型的东西,但 Monoid 实例只对 Num 实例有意义。因此 fmap 的类型感觉有点奇怪。然而,这并不是不让它们成为 Functor 个实例的好理由。