En Haskell, la classe estàndard Foldable és l’encarregada de permetre l’ús dels folds sobre dades estructurades per tal d’obtenir-ne un agregat. Per exemple, les llistes són instàncies de Foldable, i la funció sum és definida a la classe Foldable.
La classe Foldable es defineix (essencialment) d’aquesta forma:
Per instanciar Foldable només cal definir foldr, ja que totes les altres operacions tenen una definició per defecte que l’utilitza.
L’objectiu d’aquest exercici és fer que el tipus dels arbres binaris sigui una intància de la classe Foldable. Considereu aquest tipus pels arbres binaris:
Es demana:
A l’hora de corregir es tindrà en compte la correcció, senzillesa, elegància i consició de la solució proposada.
Input
maximum $ Node 'a' (Node 'c' Empty Empty) (Node 'b' Empty Empty) avg $ Node 10 (Node 20 Empty Empty) (Node 30 Empty Empty) cat $ Node "mi" (Node "mama" Empty Empty) (Node "me" (Node "mima" Empty Empty) Empty)
Output
'c' 20.0 "mi mama me mima"