(* Binary tree with leaves carrying an integer. *) type tree = Leaf of int | Node of tree * tree
let rec exists_leaf test tree =
match tree with | Leaf v -> test v | Node (left, right) -> exists_leaf test left || exists_leaf test right
let has_even_leaf tree =
exists_leaf (fun n -> n mod 2 = 0) tree