Container_exts.Extend1SourceExtend1 creates extensions for a Container.S1.
module C : Base.Container.S1include Container_exts_types.Generic
with type 'a t := 'a C.t
and type 'a elt := 'aGeneric_extensions refers to the container type as 'a t, and the element type as 'a elt; substitute t/elt (arity-0) or 'a t/'a (arity-1) accordingly below.
include Generic_types.Generic with type 'a t := 'a C.t with type 'a elt := 'aThe following functions help in checking whether a container has a particular, commonly-required number of elements (zero or one, one, two, and so on).
at_most_one xs returns Ok None if xs is empty; Ok Some(x) if it contains only x; and an error otherwise.
Examples (using an extended version of List):
List.at_most_one [] (* ok None *) at_most_one
[1] (* ok (Some 1) *)
at_most_one [1; 2]
(* error -- too many *)one xs returns Ok x if xs contains only x, and an error otherwise.
Examples (using an extended version of List):
List.one [] (* error -- not enough *) one [1] (* ok 1 *) one [1; 2]
(* error -- too many *)two xs returns Ok (x, y) if xs is a list containing only x and y in that order, and an error otherwise.
Examples (using an extended version of List):
List.two [] (* error -- not enough *) two
[1] (* error -- not enough *)
two
[1; 2] (* ok (1, 2) *)
two [1; 2; 3]
(* error -- too many *)Predicate extensions are available on all arity-1 containers, provided that we fix the element type parameter to 'a -> bool.
include Container_exts_types.Generic_predicate
with type 'a t := ('a -> Base.bool) C.t
and type 'a item := 'aany x ~predicates tests x against predicates until one returns true, in which case it returns true; or all return false, in which case it returns false.
any x ~predicates tests x against predicates until one returns false, in which case it returns false; or all return true, in which case it returns true.