(* https://github.com/ocaml/ocaml/blob/cce52acc7c7903e92078e9fe40745e11a1b944f0/stdlib/pervasives.ml *) let failwith = Stdlib.failwith let printf = Printf.printf external ( |> ) : 'a -> ('a -> 'b) -> 'b = "%revapply" external stdlib_plus_int : int -> int -> int = "%addint" external stdlib_minus_int : int -> int -> int = "%subint" external stdlib_multiply_int : int -> int -> int = "%mulint" external stdlib_divide_int : int -> int -> int = "%divint" external stdlib_mod_int : int -> int -> int = "%modint" external stdlib_plus_float : float -> float -> float = "%addfloat" external stdlib_minus_float : float -> float -> float = "%subfloat" external stdlib_multiply_float : float -> float -> float = "%mulfloat" external stdlib_divide_float : float -> float -> float = "%divfloat" external stdlib_string_length : string -> int = "%string_length" external bytes_create : int -> bytes = "caml_create_bytes" external string_blit : string -> int -> bytes -> int -> int -> unit = "caml_blit_string" [@@noalloc] external bytes_blit : bytes -> int -> bytes -> int -> int -> unit = "caml_blit_bytes" [@@noalloc] external bytes_unsafe_to_string : bytes -> string = "%bytes_to_string" let stdlib_string_concat s1 s2 = let l1 = stdlib_string_length s1 and l2 = stdlib_string_length s2 in let s = bytes_create (l1 + l2) in string_blit s1 0 s 0 l1; string_blit s2 0 s l1 l2; bytes_unsafe_to_string s external ( = ) : 'a -> 'a -> bool = "%equal" external ( <> ) : 'a -> 'a -> bool = "%notequal" external ( < ) : 'a -> 'a -> bool = "%lessthan" external ( > ) : 'a -> 'a -> bool = "%greaterthan" external ( <= ) : 'a -> 'a -> bool = "%lessequal" external ( >= ) : 'a -> 'a -> bool = "%greaterequal" external not : bool -> bool = "%boolnot" external ( or ) : bool -> bool -> bool = "%sequor" external ( & ) : bool -> bool -> bool = "%sequand"