我正在尝试使用Foldable
Haskell 中的类型类,使用以下数据类型作为示例:
data Tree a = Empty
| Node (Tree a) a (Tree a)
如果我使用DeriveFoldable
GHC 扩展,它似乎会派生一个Foldable
实例
instance Foldable Tree where
foldMap _ Empty = mempty
foldMap f (Node l n r) = (foldMap f l) <> (f n) <> (foldMap f r)
即,树的中序遍历。但是,我没有看到任何明显的阻止不同Foldable
实例的东西,例如前序遍历:
instance Foldable Tree where
foldMap _ Empty = mempty
foldMap f (Node l n r) = (f n) <> (foldMap f l) <> (foldMap f r)
是否存在Foldable
使前序遍历实例非法的类型类的法律?