2
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

fy将和都映射z到一个幺半群中,所以f zf y <> f z是那个幺半群的实例。那么,为什么第二个不行呢?

4

1 回答 1

2

您的实例没问题,因为它不违反任何可折叠法律,只要您保持其结果。奇怪的是,它MyData包含两个 type 组件b,其中一个不考虑折叠。

于 2022-01-18T13:18:21.867 回答