мне нужно сделать складной экземпляр для роз древовидной структуры данных:Haskell моноид складного розового дерева
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.
Вместо того, чтобы обновлять решение в своем вопросе, почему бы вам не написать его здесь как ответ? – Sibi
Хороший, не думал об этой возможности! – user2999349
как насчет 'выводить (сложенный)' с '{- LANGUAGE DeriveFoldable -}'? – viorior