Der Listentyp hat die Konstruktoren (:) :: a -> [a] -> [a] und [] :: [a], deswegen bekommt foldr zwei Argumente, nämlich Funktionen vom Typ a -> b -> b sowie b.
Das gleiche Verfahren liefert den passenden Iterator für Bäume: wir ersetzen die Konstruktoren Node und Leaf durch Funktionen vom richtigen Typ, und können damit die primitiv rekursiven Funktionen über Bäumen darstellen (Quelltext).