package odoc
Source file odoc_list.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44include List let rec concat_map_sep ~sep ~f = function | [] -> [] | [ x ] -> f x | x :: xs -> let hd = f x in let tl = concat_map_sep ~sep ~f xs in hd @ (sep :: tl) let concat_map f l = let rec aux f acc = function | [] -> rev acc | x :: l -> let xs = f x in aux f (rev_append xs acc) l in aux f [] l let rec filter_map acc f = function | hd :: tl -> let acc = match f hd with Some x -> x :: acc | None -> acc in filter_map acc f tl | [] -> List.rev acc let filter_map f x = filter_map [] f x (** @raise Failure if the list is empty. *) let rec last = function | [] -> failwith "Odoc_utils.List.last" | [ x ] -> x | _ :: tl -> last tl (* From ocaml/ocaml *) let rec find_map f = function | [] -> None | x :: l -> ( match f x with Some _ as result -> result | None -> find_map f l) let rec find_opt p = function | [] -> None | x :: l -> if p x then Some x else find_opt p l let is_empty = function [] -> true | _ :: _ -> false