type ('a, -'perms) tThe meaning of the
'permsparameter is as usual (see thePermsmodule for more details) with the non-obvious difference that you don't need any permissions to extract the length of an array. This was done for simplicity because some information about the length of an array can leak out even if you only have write permissions since you can catch out-of-bounds errors.
include Bin_prot.Binable.S2 with type ('a, -'perms) t := ('a, 'perms) t
val bin_shape_t : Bin_prot.Shape.t -> Bin_prot.Shape.t -> Bin_prot.Shape.tval bin_size_t : ('a, 'b, ('a, 'perms) t) Bin_prot.Size.sizer2val bin_write_t : ('a, 'b, ('a, 'perms) t) Bin_prot.Write.writer2val bin_read_t : ('a, 'b, ('a, 'perms) t) Bin_prot.Read.reader2val __bin_read_t__ : ('a, 'b, int -> ('a, 'perms) t) Bin_prot.Read.reader2val bin_writer_t : ('a, 'b, ('a, 'perms) t) Bin_prot.Type_class.S2.writerval bin_reader_t : ('a, 'b, ('a, 'perms) t) Bin_prot.Type_class.S2.readerval bin_t : ('a, 'b, ('a, 'perms) t) Bin_prot.Type_class.S2.t
val compare : ('a -> 'a -> Base.Int.t) -> ('perms -> 'perms -> Base.Int.t) -> ('a, 'perms) t -> ('a, 'perms) t -> Base.Int.t
include Ppx_sexp_conv_lib.Sexpable.S2 with type ('a, -'perms) t := ('a, 'perms) t
val t_of_sexp : (Sexplib0.Sexp.t -> 'a) -> (Sexplib0.Sexp.t -> 'b) -> Sexplib0.Sexp.t -> ('a, 'perms) tval sexp_of_t : ('a -> Sexplib0.Sexp.t) -> ('b -> Sexplib0.Sexp.t) -> ('a, 'perms) t -> Sexplib0.Sexp.t
module Int : sig ... endmodule Float : sig ... endval of_array_id : 'a Base.Array.t -> ('a, [< Perms.Export.read_write ]) tof_array_idandto_array_idreturn the same underlying array. On the other hand,to_array(inherited fromContainer.S1_permissionsbelow) makes a copy.To create a new (possibly immutable) copy of an array
a, usecopy (of_array_id a). More generally, any function that takes a (possibly mutable)tcan be called on an array by callingof_array_idon it first.There is a conceptual type equality between
'a Array.tand('a, read_write) Array.Permissioned.t. The reason for not exposing this as an actual type equality is that we also want:- The type equality
'a Array.t = 'a arrayfor interoperability with code which does not use Core. - The type
('a, 'perms) Array.Permissioned.tto be abstract, so that the permission phantom type will have an effect.
Since we don't control the definition of
'a array, this would require a type('a, 'perms) Array.Permissioned.twhich is abstract, except that('a, read_write) Array.Permissioned.tis concrete, which is not possible.- The type equality
val to_array_id : ('a, [> Perms.Export.read_write ]) t -> 'a Base.Array.tval to_sequence_immutable : ('a, [> Perms.Export.immutable ]) t -> 'a Sequence.tto_sequence_immutable tconvertstto a sequence. Unliketo_sequence,to_sequence_immutabledoes not need to copytsince it is immutable.
include Container.S1_permissions with type ('a, 'perms) t := ('a, 'perms) t
val mem : ('a, 'perms) t -> 'a -> equal:('a -> 'a -> Base.Bool.t) -> Base.Bool.tChecks whether the provided element is there, using polymorphic compare if
equalis not provided.
val length : ('a, 'perms) t -> Base.Int.tval is_empty : ('a, 'perms) t -> Base.Bool.tval iter : ('a, 'perms) t -> f:('a -> Base.Unit.t) -> Base.Unit.tval fold : ('a, 'perms) t -> init:'accum -> f:('accum -> 'a -> 'accum) -> 'accumfold t ~init ~freturnsf (... f (f (f init e1) e2) e3 ...) en, wheree1..enare the elements oft
val fold_result : ('a, 'perms) t -> init:'accum -> f:('accum -> 'a -> ('accum, 'e) Result.t) -> ('accum, 'e) Result.tfold_result t ~init ~fis a short-circuiting version offoldthat runs in theResultmonad. Iffreturns anError _, that value is returned without any additional invocations off.
val fold_until : ('a, 'perms) t -> init:'accum -> f:('accum -> 'a -> ('accum, 'final) Container_intf.Continue_or_stop.t) -> finish:('accum -> 'final) -> 'finalfold_until t ~init ~f ~finishis a short-circuiting version offold. IffreturnsStop _the computation ceases and results in that value. IffreturnsContinue _, the fold will proceed. Iffnever returnsStop _, the final result is computed byfinish.
val exists : ('a, 'perms) t -> f:('a -> Base.Bool.t) -> Base.Bool.tReturns
trueif and only if there exists an element for which the provided function evaluates totrue. This is a short-circuiting operation.
val for_all : ('a, 'perms) t -> f:('a -> Base.Bool.t) -> Base.Bool.tReturns
trueif and only if the provided function evaluates totruefor all elements. This is a short-circuiting operation.
val count : ('a, 'perms) t -> f:('a -> Base.Bool.t) -> Base.Int.tReturns the number of elements for which the provided function evaluates to true.
val sum : (module Base.Container.Summable with type t = 'sum) -> ('a, 'perms) t -> f:('a -> 'sum) -> 'sumReturns the sum of
f ifor i in the container
val find : ('a, 'perms) t -> f:('a -> Base.Bool.t) -> 'a Base.Option.tReturns as an
optionthe first element for whichfevaluates to true.
val find_map : ('a, 'perms) t -> f:('a -> 'b Base.Option.t) -> 'b Base.Option.tReturns the first evaluation of
fthat returnsSome, and returnsNoneif there is no such element.
val to_list : ('a, 'perms) t -> 'a Base.List.tval to_array : ('a, 'perms) t -> 'a Base.Array.tval min_elt : ('a, 'perms) t -> compare:('a -> 'a -> Base.Int.t) -> 'a Base.Option.tReturns a min (resp max) element from the collection using the provided
comparefunction. In case of a tie, the first element encountered while traversing the collection is returned. The implementation usesfoldso it has the same complexity asfold. ReturnsNoneiff the collection is empty.
val max_elt : ('a, 'perms) t -> compare:('a -> 'a -> Base.Int.t) -> 'a Base.Option.t
include Blit.S1_permissions with type ('a, 'perms) t := ('a, 'perms) t
val blit : (('a, 'perms) t, ('a, 'perms) t) Base.Blit.blitval blito : (('a, 'perms) t, ('a, 'perms) t) Base.Blit.blitoval unsafe_blit : (('a, 'perms) t, ('a, 'perms) t) Base.Blit.blitval sub : (('a, 'perms) t, ('a, 'perms) t) Base.Blit.subval subo : (('a, 'perms) t, ('a, 'perms) t) Base.Blit.subo
include Binary_searchable.S1_permissions with type ('a, 'perms) t := ('a, 'perms) t
val binary_search : (('a, 'perms) t, 'a, 'key) Base.Binary_searchable.binary_searchval binary_search_segmented : (('a, 'perms) t, 'a) Base.Binary_searchable.binary_search_segmented
val length : (_, _) t -> Base.Int.tval is_empty : (_, _) t -> Base.Bool.t
val get : ('a, [> Perms.Export.read ]) t -> Base.Int.t -> 'aval set : ('a, [> Perms.Export.write ]) t -> Base.Int.t -> 'a -> Base.Unit.tval unsafe_get : ('a, [> Perms.Export.read ]) t -> Base.Int.t -> 'aval unsafe_set : ('a, [> Perms.Export.write ]) t -> Base.Int.t -> 'a -> Base.Unit.t
val create : len:Base.Int.t -> 'a -> ('a, [< _ Perms.Export.perms ]) tval init : Base.Int.t -> f:(Base.Int.t -> 'a) -> ('a, [< _ Perms.Export.perms ]) tval make_matrix : dimx:Base.Int.t -> dimy:Base.Int.t -> 'a -> (('a, [< _ Perms.Export.perms ]) t, [< _ Perms.Export.perms ]) tval append : ('a, [> Perms.Export.read ]) t -> ('a, [> Perms.Export.read ]) t -> ('a, [< _ Perms.Export.perms ]) tval concat : ('a, [> Perms.Export.read ]) t Base.List.t -> ('a, [< _ Perms.Export.perms ]) tval copy : ('a, [> Perms.Export.read ]) t -> ('a, [< _ Perms.Export.perms ]) tval fill : ('a, [> Perms.Export.write ]) t -> pos:Base.Int.t -> len:Base.Int.t -> 'a -> Base.Unit.tval of_list : 'a Base.List.t -> ('a, [< _ Perms.Export.perms ]) tval map : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval mapi : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval folding_map : ('a, [> Perms.Export.read ]) t -> init:'b -> f:('b -> 'a -> 'b * 'c) -> ('c, [< _ Perms.Export.perms ]) tval iteri : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Unit.t) -> Base.Unit.tval foldi : ('a, [> Perms.Export.read ]) t -> init:'b -> f:(Base.Int.t -> 'b -> 'a -> 'b) -> 'bval folding_mapi : ('a, [> Perms.Export.read ]) t -> init:'b -> f:(Base.Int.t -> 'b -> 'a -> 'b * 'c) -> ('c, [< _ Perms.Export.perms ]) tval fold_right : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b -> 'b) -> init:'b -> 'bval sort : ?pos:Base.Int.t -> ?len:Base.Int.t -> ('a, [> Perms.Export.read_write ]) t -> compare:('a -> 'a -> Base.Int.t) -> Base.Unit.tval stable_sort : ('a, [> Perms.Export.read_write ]) t -> compare:('a -> 'a -> Base.Int.t) -> Base.Unit.tval is_sorted : ('a, [> Perms.Export.read ]) t -> compare:('a -> 'a -> Base.Int.t) -> Base.Bool.tval is_sorted_strictly : ('a, [> Perms.Export.read ]) t -> compare:('a -> 'a -> Base.Int.t) -> Base.Bool.tval concat_map : ('a, [> Perms.Export.read ]) t -> f:('a -> ('b, [> Perms.Export.read ]) t) -> ('b, [< _ Perms.Export.perms ]) tval concat_mapi : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> ('b, [> Perms.Export.read ]) t) -> ('b, [< _ Perms.Export.perms ]) tval partition_tf : ('a, [> Perms.Export.read ]) t -> f:('a -> Base.Bool.t) -> ('a, [< _ Perms.Export.perms ]) t * ('a, [< _ Perms.Export.perms ]) tval partitioni_tf : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> ('a, [< _ Perms.Export.perms ]) t * ('a, [< _ Perms.Export.perms ]) tval cartesian_product : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> ('a * 'b, [< _ Perms.Export.perms ]) tval transpose : (('a, [> Perms.Export.read ]) t, [> Perms.Export.read ]) t -> (('a, [< _ Perms.Export.perms ]) t, [< _ Perms.Export.perms ]) t Base.Option.tval transpose_exn : (('a, [> Perms.Export.read ]) t, [> Perms.Export.read ]) t -> (('a, [< _ Perms.Export.perms ]) t, [< _ Perms.Export.perms ]) tval normalize : (_, _) t -> Base.Int.t -> Base.Int.tval slice : ('a, [> Perms.Export.read ]) t -> Base.Int.t -> Base.Int.t -> ('a, [< _ Perms.Export.perms ]) tval nget : ('a, [> Perms.Export.read ]) t -> Base.Int.t -> 'aval nset : ('a, [> Perms.Export.write ]) t -> Base.Int.t -> 'a -> Base.Unit.tval filter_opt : ('a Base.Option.t, [> Perms.Export.read ]) t -> ('a, [< _ Perms.Export.perms ]) tval filter_map : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b Base.Option.t) -> ('b, [< _ Perms.Export.perms ]) tval filter_mapi : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> 'b Base.Option.t) -> ('b, [< _ Perms.Export.perms ]) tval for_alli : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> Base.Bool.tval existsi : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> Base.Bool.tval counti : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> Base.Int.tval iter2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> f:('a -> 'b -> Base.Unit.t) -> Base.Unit.tval map2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> f:('a -> 'b -> 'c) -> ('c, [< _ Perms.Export.perms ]) tval fold2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> init:'c -> f:('c -> 'a -> 'b -> 'c) -> 'cval for_all2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> f:('a -> 'b -> Base.Bool.t) -> Base.Bool.tval exists2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> f:('a -> 'b -> Base.Bool.t) -> Base.Bool.tval filter : ('a, [> Perms.Export.read ]) t -> f:('a -> Base.Bool.t) -> ('a, [< _ Perms.Export.perms ]) tval filteri : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> ('a, [< _ Perms.Export.perms ]) tval swap : ('a, [> Perms.Export.read_write ]) t -> Base.Int.t -> Base.Int.t -> Base.Unit.tval rev_inplace : ('a, [> Perms.Export.read_write ]) t -> Base.Unit.tval of_list_rev : 'a Base.List.t -> ('a, [< _ Perms.Export.perms ]) tval of_list_map : 'a Base.List.t -> f:('a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval of_list_mapi : 'a Base.List.t -> f:(Base.Int.t -> 'a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval of_list_rev_map : 'a Base.List.t -> f:('a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval of_list_rev_mapi : 'a Base.List.t -> f:(Base.Int.t -> 'a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval map_inplace : ('a, [> Perms.Export.read_write ]) t -> f:('a -> 'a) -> Base.Unit.tval find_exn : ('a, [> Perms.Export.read ]) t -> f:('a -> Base.Bool.t) -> 'aval find_map_exn : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b Base.Option.t) -> 'bval findi : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> (Base.Int.t * 'a) Base.Option.tval findi_exn : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> Base.Bool.t) -> Base.Int.t * 'aval find_mapi : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> 'b Base.Option.t) -> 'b Base.Option.tval find_mapi_exn : ('a, [> Perms.Export.read ]) t -> f:(Base.Int.t -> 'a -> 'b Base.Option.t) -> 'bval find_consecutive_duplicate : ('a, [> Perms.Export.read ]) t -> equal:('a -> 'a -> Base.Bool.t) -> ('a * 'a) Base.Option.tval reduce : ('a, [> Perms.Export.read ]) t -> f:('a -> 'a -> 'a) -> 'a Base.Option.tval reduce_exn : ('a, [> Perms.Export.read ]) t -> f:('a -> 'a -> 'a) -> 'aval permute : ?random_state:Base.Random.State.t -> ('a, [> Perms.Export.read_write ]) t -> Base.Unit.tval zip : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> ('a * 'b, [< _ Perms.Export.perms ]) t Base.Option.tval zip_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> ('a * 'b, [< _ Perms.Export.perms ]) tval unzip : ('a * 'b, [> Perms.Export.read ]) t -> ('a, [< _ Perms.Export.perms ]) t * ('b, [< _ Perms.Export.perms ]) tval sorted_copy : ('a, [> Perms.Export.read ]) t -> compare:('a -> 'a -> Base.Int.t) -> ('a, [< _ Perms.Export.perms ]) tval last : ('a, [> Perms.Export.read ]) t -> 'aval equal : ('a -> 'a -> Base.Bool.t) -> ('a, [> Perms.Export.read ]) t -> ('a, [> Perms.Export.read ]) t -> Base.Bool.tval to_sequence : ('a, [> Perms.Export.read ]) t -> 'a Sequence.tval to_sequence_mutable : ('a, [> Perms.Export.read ]) t -> 'a Sequence.t