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
f
将y
和z
映射到一个半群中,因此f z
和f y <> f z
是该半群的实例。那么,为什么第二个不好呢?
您的实例是可以的,因为它不违反任何可折叠定律,只要您保持它的结果。奇怪的是,MyData
包含两个类型为b
的分量,其中一个分量在折叠中不被考虑。