Zum Beispiel habe ich einen Datentyp. Lass es ein binärer Baum sein:
%Vor%Zum Beispiel habe ich eine Traversierung des Baumes implementiert:
%Vor% Es funktioniert ziemlich gut. Aber ich möchte Foldable
interface implementieren.
Ich denke, dass ich so etwas schreiben sollte:
%Vor%Aber es funktioniert nicht. Wie kann ich das beheben?
Ich könnte versuchen, Ihnen zu sagen, wo das Problem mit Ihrem Code ist, aber leider haben Sie die Definition für foldt1
Aber das sollte funktionieren (wenn Ihre Implementierung von treeFoldt
in Ordnung ist - denken Sie daran: []
ist eine Instanz von Foldable
):
Monoid
Wie auch immer, ich denke, der einfachste Weg ist in diesem Fall, nur die foldMap
Teil:
und das funktioniert sicher.
oder
%Vor% und natürlich brauchen Sie den Monoid
Teil überhaupt nicht - die Standardimplementierungen funktionieren gut:
übrigens : Es ist höchstwahrscheinlich nicht offensichtlich, wie foldr1 (+)
nur in foldMap
ausgedrückt werden kann und es ist eine nette (fortgeschrittene) Übung, es auf eigene Faust zu versuchen: D
Ich denke, Faltbar und Traversable von A. Arnold ist ziemlich nett Blogpost auf Foldable
(und Traversable
) im Allgemeinen - vielleicht findest du es auch hilfreich
Tags und Links haskell tree-traversal