`val find : ('a -> bool) -> 'a t -> 'a option`

`find p l` returns `Some x` where `x` is the first element of `l` such that `p x` returns `true` or `None` if such element as not been found.

`val rfind : ('a -> bool) -> 'a t -> 'a option`

`rfind p l` returns `Some x` where `x` is the last element of `l` such that `p x` returns `true` or `None` if such element as not been found.

`val findi : (int -> 'a -> bool) -> 'a t -> (int * 'a) option`

`findi p e l` returns `Some (i, ai)` where `ai` and `i` are respectively the first element of `l` and its index, such that `p i ai` is true, or `None` if no such element has been found.

`val rfindi : (int -> 'a -> bool) -> 'a t -> (int * 'a) option`

`rfindi p e l` returns `Some (i, ai)` where `ai` and `i` are respectively the last element of `l` and its index, such that `p i ai` is true, or `None` if no such element has been found.

`val split_at : int -> 'a t -> [ `Ok of 'a t * 'a t | `Invalid_index of int ]`

Whenever `n` is inside of `l` size bounds, `split_at n l` returns ``Ok (l1,l2)`, where `l1` contains the first `n` elements of `l` and `l2` contains the others. Otherwise, returns ``Invalid_index n`

`val at : 'a t -> int -> [ `Ok of 'a | `Invalid_index of int ]`

If `n` is inside the bounds of `l`, `at l n` returns ``Ok x`, where `x` is the n-th element of the list `l`. Otherwise, returns ``Invalid_index n`.

`val assoc : 'a -> ('a * 'b) t -> 'b option`

`assoc a l` returns `Some b` where `b` is the value associated with key `a` in the list of pairs `l`. That is, `assoc a [ ...; (a,b); ...] = Some b` if `(a,b)` is the leftmost binding of `a` in list `l`. Return `None` if there is no value associated with `a` in the list `l`.

`val assq : 'a -> ('a * 'b) t -> 'b option`

As `assoc` but with physical equality