include Stdlib.List let flat_map f xs = let rec iter = function | [] -> [] | x :: xs -> append_then_iter xs (f x) [@@tail_mod_cons] and append_then_iter xs = function | [] -> iter xs | y :: ys -> y :: append_then_iter xs ys [@@tail_mod_cons] in iter xs let iter_up_to f xs ~limit = let rec iter n = function | x :: xs when n > 0 -> f x; iter (n - 1) xs | _ -> () in iter limit xs