我需要为玫瑰树数据结构制作一个可折叠的实例:
data Rose a = a :> [Rose a]
deriving (Eq, Show)
使用以下幺半群和玫瑰相关的类/实例:
instance Functor Rose where
fmap f (a :> bs) = (f a) :> (map (fmap f) bs)
class Monoid a where
mempty :: a
(<>) :: a -> a -> a
instance Monoid [a] where
mempty = []
(<>) = (++)
我尝试了什么:
instance Foldable Rose where
fold (a:>b) = a <> (foldMap fold b)
但是,这无法正常工作,对于系统检查,我收到错误:
*** Failed! Exception: 'Prelude.undefined':
[] :> []
但是我不确定为什么它不起作用,有人可以帮我吗?
提前致谢!
最好的问候, Skyfe。