let filter xs ~f = let rec aux i = match next xs with | Some x when not (f x) -> aux i | x -> x in from aux