Implementierung von Faltbar in Haskell

8

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?

    
David 27.03.2015, 08:00
quelle

1 Antwort

12

Ich könnte versuchen, Ihnen zu sagen, wo das Problem mit Ihrem Code ist, aber leider haben Sie die Definition für foldt1

nicht angegeben

Aber das sollte funktionieren (wenn Ihre Implementierung von treeFoldt in Ordnung ist - denken Sie daran: [] ist eine Instanz von Foldable ):

%Vor%

Grunddefinition mit Monoid

Wie auch immer, ich denke, der einfachste Weg ist in diesem Fall, nur die foldMap Teil:

%Vor%

und das funktioniert sicher.

Beispiele / Verwendung

%Vor%

oder

%Vor%

und natürlich brauchen Sie den Monoid Teil überhaupt nicht - die Standardimplementierungen funktionieren gut:

%Vor%

ü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

externe Ressourcen

Ich denke, Faltbar und Traversable von A. Arnold ist ziemlich nett Blogpost auf Foldable (und Traversable ) im Allgemeinen - vielleicht findest du es auch hilfreich

    
Carsten 27.03.2015, 08:08
quelle

Tags und Links