let filter_opt f xs = List.fold_right begin fun x acc -> match f x with | Some x -> x :: acc | None -> acc end xs []