data BT a = Leaf a | Node a (BT a) (BT a) La funzione calcola l'applicazione di f alla radice dell'albero dato come secondo input ed al risultato della chiamata di f ricorsivamente sui due sottoalberi. >> :type treeapply treeapply :: (a -> a -> a -> a) -> BT a -> a treeapply prende (in modo currificato, ovviamente) due argomenti. Il primo deve essere necessariamente una funzione di 3 argomenti per come f e' usata nel corpo di treeapply f (Node n t1 t2) = (f n (treeapply f t1) (treeapply f t2)). Il codominio del primo argomento e' necessariamente il tipo delle etichette degli alberi, poiche' il risultato di (f n (treeapply f t1) (treeapply f t2)) deve avere lo stesso tipo della x utilizzata in treeapply f (Leaf x) = x. Il tipo dell'argomento f e' ovviamente il tipo delle etichette, mentre il tipo del secondo e terzo argomento e' il tipo del codominio di treeapply che, da treeapply f (Leaf x) = x, si deduce essere il tipo delle etichette degli alberi. Da qui il risultato di >> :type treeapply