Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
utils.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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
let ( >> ) f g x = x |> f |> g module String = struct include Astring.String let length_utf8 = Uutf.String.fold_utf_8 (fun count _ _ -> count + 1) 0 let prefix_utf8 uchars string = let exception Found_new_length of int in try let (_ : int) = Uutf.String.fold_utf_8 (fun count start_pos _ -> if count = uchars then raise (Found_new_length start_pos) else count + 1) 0 string in string with Found_new_length l -> String.sub string 0 l end module List = struct include List type 'a t = 'a list let filter_map f l = let rec inner acc = function | [] -> rev acc | x :: xs -> ( match f x with | None -> (inner [@tailcall]) acc xs | Some y -> (inner [@tailcall]) (y :: acc) xs) in inner [] l let lift_result l = List.fold_right (fun a b -> match (a, b) with | Ok o, Ok acc -> Ok (o :: acc) | Ok _, Error e -> Error e | Error e, Error acc -> Error (e :: acc) | Error e, Ok _ -> Error [ e ]) l (Ok []) let init n f = let rec aux acc i = if i >= n then rev acc else aux (f i :: acc) (i + 1) in aux [] 0 end module Result = struct let map f = function Ok x -> Ok (f x) | Error e -> Error e end module Option = struct let is_some = function Some _ -> true | None -> false let get_exn = function | Some x -> x | None -> invalid_arg "Option.get_exn: None" let value ~default = function None -> default | Some x -> x let ( || ) a b = match (a, b) with | None, None -> None | (Some _ as x), _ | None, (Some _ as x) -> x end