foldMap的充分实例化


data MyData a b = MyData a b b

为什么第一个实例化好而第二个实例化不好?

instance Foldable (MyData a) where
foldMap f (MyData x y z) = f y <> f z
instance Foldable (MyData a) where 
foldMap f (MyData x y z) = f z

fyz映射到一个半群中,因此f zf y <> f z是该半群的实例。那么,为什么第二个不好呢?

您的实例是可以的,因为它不违反任何可折叠定律,只要您保持它的结果。奇怪的是,MyData包含两个类型为b的分量,其中一个分量在折叠中不被考虑。

最新更新