package regular

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Extension of the standard bytes module.

We enhanced OCaml standard Bytes module with the expected set of functions. Bytes are not Regular, as Regular interface itself refers to bytes. However it includes a pretty big subset of regular (excluding Data module, but bytes indeed do not need any specific support for the serialization).

bytes

include Core_kernel.Bin_prot.Binable.S with type t := t
include Ppx_compare_lib.Comparable.S with type t := t
include Sexplib0.Sexpable.S with type t := t
include Core_kernel.Container.S0 with type t := t with type elt := char
val mem : t -> char -> bool

Checks whether the provided element is there, using equality on elts.

val is_empty : t -> bool
val iter : t -> f:(char -> unit) -> unit

iter must allow exceptions raised in f to escape, terminating the iteration cleanly. The same holds for all functions below taking an f.

val fold : t -> init:'accum -> f:('accum -> char -> 'accum) -> 'accum

fold t ~init ~f returns f (... f (f (f init e1) e2) e3 ...) en, where e1..en are the elements of t.

val fold_result : t -> init:'accum -> f:('accum -> char -> ('accum, 'e) Base.Result.t) -> ('accum, 'e) Base.Result.t

fold_result t ~init ~f is a short-circuiting version of fold that runs in the Result monad. If f returns an Error _, that value is returned without any additional invocations of f.

val fold_until : t -> init:'accum -> f:('accum -> char -> ('accum, 'final) Base.Container.Continue_or_stop.t) -> finish:('accum -> 'final) -> 'final

fold_until t ~init ~f ~finish is a short-circuiting version of fold. If f returns Stop _ the computation ceases and results in that value. If f returns Continue _, the fold will proceed. If f never returns Stop _, the final result is computed by finish.

Example:

type maybe_negative =
  | Found_negative of int
  | All_nonnegative of { sum : int }

(** [first_neg_or_sum list] returns the first negative number in [list], if any,
    otherwise returns the sum of the list. *)
let first_neg_or_sum =
  List.fold_until ~init:0
    ~f:(fun sum x ->
      if x < 0
      then Stop (Found_negative x)
      else Continue (sum + x))
    ~finish:(fun sum -> All_nonnegative { sum })
;;

let x = first_neg_or_sum [1; 2; 3; 4; 5]
val x : maybe_negative = All_nonnegative {sum = 15}

let y = first_neg_or_sum [1; 2; -3; 4; 5]
val y : maybe_negative = Found_negative -3
val exists : t -> f:(char -> bool) -> bool

Returns true if and only if there exists an element for which the provided function evaluates to true. This is a short-circuiting operation.

val for_all : t -> f:(char -> bool) -> bool

Returns true if and only if the provided function evaluates to true for all elements. This is a short-circuiting operation.

val count : t -> f:(char -> bool) -> int

Returns the number of elements for which the provided function evaluates to true.

val sum : (module Base.Container.Summable with type t = 'sum) -> t -> f:(char -> 'sum) -> 'sum

Returns the sum of f i for all i in the container.

val find : t -> f:(char -> bool) -> char option

Returns as an option the first element for which f evaluates to true.

val find_map : t -> f:(char -> 'a option) -> 'a option

Returns the first evaluation of f that returns Some, and returns None if there is no such element.

val to_list : t -> char list
val to_array : t -> char array
val min_elt : t -> compare:(char -> char -> int) -> char option

Returns a min (resp. max) element from the collection using the provided compare function. In case of a tie, the first element encountered while traversing the collection is returned. The implementation uses fold so it has the same complexity as fold. Returns None iff the collection is empty.

val max_elt : t -> compare:(char -> char -> int) -> char option
include Core_kernel.Blit.S with type t := t
val blit : src:t -> src_pos:int -> dst:t -> dst_pos:int -> len:int -> unit
val blito : src:t -> ?src_pos:int -> ?src_len:int -> dst:t -> ?dst_pos:int -> unit -> unit
val unsafe_blit : src:t -> src_pos:int -> dst:t -> dst_pos:int -> len:int -> unit
val sub : t -> pos:int -> len:int -> t
val subo : ?pos:int -> ?len:int -> t -> t
include Core_kernel.Identifiable.S with type t := t
include Bin_prot.Binable.S with type t := t
include Bin_prot.Binable.S_only_functions with type t := t
val bin_size_t : t Bin_prot.Size.sizer
val bin_write_t : t Bin_prot.Write.writer
val bin_read_t : t Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Bin_prot.Read.reader

This function only needs implementation if t exposed to be a polymorphic variant. Despite what the type reads, this does *not* produce a function after reading; instead it takes the constructor tag (int) before reading and reads the rest of the variant t afterwards.

val bin_shape_t : Bin_prot.Shape.t
val bin_writer_t : t Bin_prot.Type_class.writer
val bin_reader_t : t Bin_prot.Type_class.reader
include Ppx_hash_lib.Hashable.S with type t := t
include Sexplib0.Sexpable.S with type t := t
val t_of_sexp : Sexplib0.Sexp.t -> t
include Ppx_compare_lib.Comparable.S with type t := t
include Ppx_hash_lib.Hashable.S with type t := t
val sexp_of_t : t -> Sexplib0.Sexp.t
include Base.Stringable.S with type t := t
include Base.Pretty_printer.S with type t := t
val pp : Base.Formatter.t -> t -> unit
include Core.Comparable.S_binable with type t := t
include Base.Comparable.S with type t := t
include Base.Comparisons.S with type t := t
include Base.Comparisons.Infix with type t := t
val (>=) : t -> t -> bool
val (<=) : t -> t -> bool
val (=) : t -> t -> bool
val (>) : t -> t -> bool
val (<) : t -> t -> bool
val (<>) : t -> t -> bool
val equal : t -> t -> bool
val compare : t -> t -> int

compare t1 t2 returns 0 if t1 is equal to t2, a negative integer if t1 is less than t2, and a positive integer if t1 is greater than t2.

val min : t -> t -> t
val max : t -> t -> t
val ascending : t -> t -> int

ascending is identical to compare. descending x y = ascending y x. These are intended to be mnemonic when used like List.sort ~compare:ascending and List.sort ~cmp:descending, since they cause the list to be sorted in ascending or descending order, respectively.

val descending : t -> t -> int
val between : t -> low:t -> high:t -> bool

between t ~low ~high means low <= t <= high

val clamp_exn : t -> min:t -> max:t -> t

clamp_exn t ~min ~max returns t', the closest value to t such that between t' ~low:min ~high:max is true.

Raises if not (min <= max).

val clamp : t -> min:t -> max:t -> t Base.Or_error.t
include Base.Comparator.S with type t := t
type comparator_witness
val validate_lbound : min:t Core.Maybe_bound.t -> t Validate.check
val validate_ubound : max:t Core.Maybe_bound.t -> t Validate.check
val validate_bound : min:t Core.Maybe_bound.t -> max:t Core.Maybe_bound.t -> t Validate.check
include Core.Hashable.S_binable with type t := t
include Ppx_hash_lib.Hashable.S with type t := t
val hash_fold_t : Base.Hash.state -> t -> Base.Hash.state
val hash : t -> Base.Hash.hash_value
val hashable : t Base.Hashable.t
module Table : Core.Hashtbl.S_binable with type key = t
module Hash_set : Core.Hash_set.S_binable with type elt = t
module Hash_queue : Core.Hash_queue.S with type key = t
module From_string : Core_kernel.Blit.S_distinct with type src := string with type dst := t
module To_string : sig ... end
val create : int -> t

create n returns a new byte sequence of length n. The sequence is uninitialized and contains arbitrary bytes. Raise Invalid_argument if n < 0 or n > Sys.max_string_length.

val make : int -> char -> t

make n c returns a new byte sequence of length n, filled with the byte c. Raise Invalid_argument if n < 0 or n > Sys.max_string_length.

val init : int -> f:(int -> char) -> t

init n ~f returns a fresh byte sequence of length n, with character i initialized to the result of f i (in increasing index order). Raise Invalid_argument if n < 0 or n > Sys.max_string_length.

val empty : t

empty a byte sequence of size 0.

val length : t -> int

length t returns the length (number of bytes) of t.

val get : t -> int -> char

get s n returns the byte at index n in s. Raise Invalid_argument if n not a valid index in s.

val set : t -> int -> char -> unit

set s n c modifies s in place, replacing the byte at index n with c. Raise Invalid_argument if n is not a valid index in s.

val copy : t -> t

copy t returns a new byte sequence that contains the same bytes as t.

val of_string : string -> t

of_string s returns a new byte sequence that contains the same bytes as the given string.

val to_string : t -> string

to_string t returns a new string that contains the same bytes as the given byte sequence.

val extend : t -> int -> int -> t

extend s left right returns a new byte sequence that contains the bytes of s, with left uninitialized bytes prepended and right uninitialized bytes appended to it. If left or right is negative, then bytes are removed (instead of appended) from the corresponding side of s. Raise Invalid_argument if the result length is negative or longer than Sys.max_string_length bytes.

val fill : t -> int -> int -> char -> unit

fill s start len c modifies s in place, replacing len characters with c, starting at start. Raise Invalid_argument if start and len do not designate a valid range of s.

val concat : t -> t list -> t

concat sep sl concatenates the list of byte sequences sl, inserting the separator byte sequence sep between each, and returns the result as a new byte sequence. Raise Invalid_argument if the result is longer than Sys.max_string_length bytes.

val cat : t -> t -> t

cat s1 s2 concatenates s1 and s2 and returns the result as new byte sequence. Raise Invalid_argument if the result is longer than Sys.max_string_length bytes.

val iteri : t -> f:(int -> char -> unit) -> unit

iteri t ~f same as iter, but the function is applied to the index of the byte as first argument and the byte itself as second argument.

val map : t -> f:(char -> char) -> t

map s ~f applies function f in turn to all the bytes of s (in increasing index order) and stores the resulting bytes in a new sequence that is returned as the result.

val mapi : t -> f:(int -> char -> char) -> t

mapi s ~f calls f with each character of s and its index (in increasing index order) and stores the resulting bytes in a new sequence that is returned as the result.

val trim : t -> t

trim t returns a copy of t, without leading and trailing whitespace. The bytes regarded as whitespace are the ASCII characters ' ', '\012', '\n', '\r', and '\t'.

val escaped : t -> t

escaped t returns a copy of t, with special characters represented by escape sequences, following the lexical conventions of OCaml. Raise Invalid_argument if the result is longer than Sys.max_string_length bytes.

val index : t -> char -> int

index s c returns the index of the first occurrence of byte c in s. Raise Not_found if c does not occur in s.

val rindex : t -> char -> int

rindex s c returns the index of the last occurrence of byte c in s. Raise Not_found if c does not occur in s.

val index_from : t -> int -> char -> int

index_from s i c returns the index of the first occurrence of byte c in s after position i. index s c is equivalent to index_from s 0 c. Raise Invalid_argument if i is not a valid position in s. Raise Not_found if c does not occur in s after position i.

val rindex_from : t -> int -> char -> int

rindex_from s i c returns the index of the last occurrence of byte c in s before position i+1. rindex s c is equivalent to rindex_from s (length s - 1) c. Raise Invalid_argument if i+1 is not a valid position in s. Raise Not_found if c does not occur in s before position i+1.

val contains : t -> char -> bool

contains s c tests if byte c appears in s.

val contains_from : t -> int -> char -> bool

contains_from s start c tests if byte c appears in s after position start. contains s c is equivalent to contains_from s 0 c. Raise Invalid_argument if start is not a valid position in s.

val rcontains_from : t -> int -> char -> bool

rcontains_from s stop c tests if byte c appears in s before position stop+1. Raise Invalid_argument if stop < 0 or stop+1 is not a valid position in s.

val uppercase : t -> t

uppercase t returns a copy of t, with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set.

val lowercase : t -> t

lowercase t returns a copy of t, with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set.

val capitalize : t -> t

capitalize t returns a copy of t, with the first byte set to uppercase.

val uncapitalize : t -> t

uncapitalize t returns a copy of t, with the first byte set to lowercase.

module Unsafe : sig ... end