let exp_fold ~var ~int ~plus = exp_fold var int plus;;

let eval env =
  exp_fold
    ~var:(fun x -> List.assoc x env)
    ~int:(fun n -> n)
    ~plus:(fun e1 e2 -> e1 + e2);;
Noter la similitude avec la définition directe. Ici, la seule différence est que les appels récursifs sont effectués par exp_fold.