let reduce l ~f = match l with   | [] -> None   | hd :: tl -> Some (fold ~init:hd ~f tl)