Module Array.Permissioned
The Permissioned module gives the ability to restrict permissions on an array, so you can give a function read-only access to an array, create an immutable array, etc.
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, 'b) t) Bin_prot.Size.sizer2val bin_write_t : ('a, 'b, ('a, 'b) t) Bin_prot.Write.writer2val bin_read_t : ('a, 'b, ('a, 'b) t) Bin_prot.Read.reader2val __bin_read_t__ : ('a, 'b, int -> ('a, 'b) t) Bin_prot.Read.reader2val bin_writer_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.writerval bin_reader_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.readerval bin_t : ('a, 'b, ('a, 'b) t) Bin_prot.Type_class.S2.t
val compare : ('a -> 'a -> Core_kernel__.Import.int) -> ('perms -> 'perms -> Core_kernel__.Import.int) -> ('a, 'perms) t -> ('a, 'perms) t -> Core_kernel__.Import.int
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, 'b) tval sexp_of_t : ('a -> Sexplib0.Sexp.t) -> ('b -> Sexplib0.Sexp.t) -> ('a, 'b) t -> Sexplib0.Sexp.t
module Int : sig ... endmodule Float : sig ... endval of_array_id : 'a Core_kernel__.Import.array -> ('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 Core_kernel__.Import.arrayval 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.Export.read ]) t -> 'a -> equal:('a -> 'a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolChecks whether the provided element is there, using polymorphic compare if
equalis not provided.
val length : (_, [> Perms.Export.read ]) t -> Core_kernel__.Import.intval is_empty : (_, [> Perms.Export.read ]) t -> Core_kernel__.Import.boolval iter : ('a, [> Perms.Export.read ]) t -> f:('a -> Core_kernel__.Import.unit) -> Core_kernel__.Import.unitval fold : ('a, [> Perms.Export.read ]) 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.Export.read ]) 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.Export.read ]) 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.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolReturns
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.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolReturns
trueif and only if the provided function evaluates totruefor all elements. This is a short-circuiting operation.
val count : ('a, [> Perms.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.intReturns the number of elements for which the provided function evaluates to true.
val sum : (module Base.Container.Summable with type t = 'sum) -> ('a, [> Perms.Export.read ]) t -> f:('a -> 'sum) -> 'sumReturns the sum of
f ifor i in the container
val find : ('a, [> Perms.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> 'a Core_kernel__.Import.optionReturns as an
optionthe first element for whichfevaluates to true.
val find_map : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b Core_kernel__.Import.option) -> 'b Core_kernel__.Import.optionReturns the first evaluation of
fthat returnsSome, and returnsNoneif there is no such element.
val to_list : ('a, [> Perms.Export.read ]) t -> 'a Core_kernel__.Import.listval to_array : ('a, [> Perms.Export.read ]) t -> 'a Core_kernel__.Import.arrayval min_elt : ('a, [> Perms.Export.read ]) t -> compare:('a -> 'a -> Core_kernel__.Import.int) -> 'a Core_kernel__.Import.optionReturns 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.Export.read ]) t -> compare:('a -> 'a -> Core_kernel__.Import.int) -> 'a Core_kernel__.Import.option
include Blit.S1_permissions with type ('a, 'perms) t := ('a, 'perms) t
val blit : (('a, [> Perms.Export.read ]) t, ('a, [> Perms.Export.write ]) t) Base.Blit.blitval blito : (('a, [> Perms.Export.read ]) t, ('a, [> Perms.Export.write ]) t) Base.Blit.blitoval unsafe_blit : (('a, [> Perms.Export.read ]) t, ('a, [> Perms.Export.write ]) t) Base.Blit.blitval sub : (('a, [> Perms.Export.read ]) t, ('a, [< _ Perms.Export.perms ]) t) Base.Blit.subval subo : (('a, [> Perms.Export.read ]) t, ('a, [< _ Perms.Export.perms ]) t) Base.Blit.subo
include Binary_searchable.S1_permissions with type ('a, 'perms) t := ('a, 'perms) t
val binary_search : (('a, [> Perms.Export.read ]) t, 'a, 'key) Base.Binary_searchable.binary_searchval binary_search_segmented : (('a, [> Perms.Export.read ]) t, 'a) Base.Binary_searchable.binary_search_segmented
val length : (_, _) t -> Core_kernel__.Import.intval is_empty : (_, _) t -> Core_kernel__.Import.bool
val get : ('a, [> Perms.Export.read ]) t -> Core_kernel__.Import.int -> 'aval set : ('a, [> Perms.Export.write ]) t -> Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.unitval unsafe_get : ('a, [> Perms.Export.read ]) t -> Core_kernel__.Import.int -> 'aval unsafe_set : ('a, [> Perms.Export.write ]) t -> Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.unit
val create : len:Core_kernel__.Import.int -> 'a -> ('a, [< _ Perms.Export.perms ]) tval init : Core_kernel__.Import.int -> f:(Core_kernel__.Import.int -> 'a) -> ('a, [< _ Perms.Export.perms ]) tval make_matrix : dimx:Core_kernel__.Import.int -> dimy:Core_kernel__.Import.int -> '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 Core_kernel__.Import.list -> ('a, [< _ Perms.Export.perms ]) tval copy : ('a, [> Perms.Export.read ]) t -> ('a, [< _ Perms.Export.perms ]) tval fill : ('a, [> Perms.Export.write ]) t -> pos:Core_kernel__.Import.int -> len:Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.unitval of_list : 'a Core_kernel__.Import.list -> ('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:(Core_kernel__.Import.int -> '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:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.unit) -> Core_kernel__.Import.unitval foldi : ('a, [> Perms.Export.read ]) t -> init:'b -> f:(Core_kernel__.Import.int -> 'b -> 'a -> 'b) -> 'bval folding_mapi : ('a, [> Perms.Export.read ]) t -> init:'b -> f:(Core_kernel__.Import.int -> '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:Core_kernel__.Import.int -> ?len:Core_kernel__.Import.int -> ('a, [> Perms.Export.read_write ]) t -> compare:('a -> 'a -> Core_kernel__.Import.int) -> Core_kernel__.Import.unitval stable_sort : ('a, [> Perms.Export.read_write ]) t -> compare:('a -> 'a -> Core_kernel__.Import.int) -> Core_kernel__.Import.unitval is_sorted : ('a, [> Perms.Export.read ]) t -> compare:('a -> 'a -> Core_kernel__.Import.int) -> Core_kernel__.Import.boolval is_sorted_strictly : ('a, [> Perms.Export.read ]) t -> compare:('a -> 'a -> Core_kernel__.Import.int) -> Core_kernel__.Import.boolval 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:(Core_kernel__.Import.int -> 'a -> ('b, [> Perms.Export.read ]) t) -> ('b, [< _ Perms.Export.perms ]) tval partition_tf : ('a, [> Perms.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> ('a, [< _ Perms.Export.perms ]) t * ('a, [< _ Perms.Export.perms ]) tval partitioni_tf : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> ('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 Core_kernel__.Import.optionval transpose_exn : (('a, [> Perms.Export.read ]) t, [> Perms.Export.read ]) t -> (('a, [< _ Perms.Export.perms ]) t, [< _ Perms.Export.perms ]) tval normalize : (_, _) t -> Core_kernel__.Import.int -> Core_kernel__.Import.intval slice : ('a, [> Perms.Export.read ]) t -> Core_kernel__.Import.int -> Core_kernel__.Import.int -> ('a, [< _ Perms.Export.perms ]) tval nget : ('a, [> Perms.Export.read ]) t -> Core_kernel__.Import.int -> 'aval nset : ('a, [> Perms.Export.write ]) t -> Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.unitval filter_opt : ('a Core_kernel__.Import.option, [> Perms.Export.read ]) t -> ('a, [< _ Perms.Export.perms ]) tval filter_map : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b Core_kernel__.Import.option) -> ('b, [< _ Perms.Export.perms ]) tval filter_mapi : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> 'b Core_kernel__.Import.option) -> ('b, [< _ Perms.Export.perms ]) tval for_alli : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolval existsi : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolval counti : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.intval iter2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> f:('a -> 'b -> Core_kernel__.Import.unit) -> Core_kernel__.Import.unitval 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 -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolval exists2_exn : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> f:('a -> 'b -> Core_kernel__.Import.bool) -> Core_kernel__.Import.boolval filter : ('a, [> Perms.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> ('a, [< _ Perms.Export.perms ]) tval filteri : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> ('a, [< _ Perms.Export.perms ]) tval swap : ('a, [> Perms.Export.read_write ]) t -> Core_kernel__.Import.int -> Core_kernel__.Import.int -> Core_kernel__.Import.unitval rev_inplace : ('a, [> Perms.Export.read_write ]) t -> Core_kernel__.Import.unitval of_list_rev : 'a Core_kernel__.Import.list -> ('a, [< _ Perms.Export.perms ]) tval of_list_map : 'a Core_kernel__.Import.list -> f:('a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval of_list_mapi : 'a Core_kernel__.Import.list -> f:(Core_kernel__.Import.int -> 'a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval of_list_rev_map : 'a Core_kernel__.Import.list -> f:('a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval of_list_rev_mapi : 'a Core_kernel__.Import.list -> f:(Core_kernel__.Import.int -> 'a -> 'b) -> ('b, [< _ Perms.Export.perms ]) tval map_inplace : ('a, [> Perms.Export.read_write ]) t -> f:('a -> 'a) -> Core_kernel__.Import.unitval find_exn : ('a, [> Perms.Export.read ]) t -> f:('a -> Core_kernel__.Import.bool) -> 'aval find_map_exn : ('a, [> Perms.Export.read ]) t -> f:('a -> 'b Core_kernel__.Import.option) -> 'bval findi : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> (Core_kernel__.Import.int * 'a) Core_kernel__.Import.optionval findi_exn : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> Core_kernel__.Import.bool) -> Core_kernel__.Import.int * 'aval find_mapi : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> 'b Core_kernel__.Import.option) -> 'b Core_kernel__.Import.optionval find_mapi_exn : ('a, [> Perms.Export.read ]) t -> f:(Core_kernel__.Import.int -> 'a -> 'b Core_kernel__.Import.option) -> 'bval find_consecutive_duplicate : ('a, [> Perms.Export.read ]) t -> equal:('a -> 'a -> Core_kernel__.Import.bool) -> ('a * 'a) Core_kernel__.Import.optionval reduce : ('a, [> Perms.Export.read ]) t -> f:('a -> 'a -> 'a) -> 'a Core_kernel__.Import.optionval reduce_exn : ('a, [> Perms.Export.read ]) t -> f:('a -> 'a -> 'a) -> 'aval permute : ?random_state:Core_kernel__.Import.Random.State.t -> ('a, [> Perms.Export.read_write ]) t -> Core_kernel__.Import.unitval zip : ('a, [> Perms.Export.read ]) t -> ('b, [> Perms.Export.read ]) t -> ('a * 'b, [< _ Perms.Export.perms ]) t Core_kernel__.Import.optionval 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 -> Core_kernel__.Import.int) -> ('a, [< _ Perms.Export.perms ]) tval last : ('a, [> Perms.Export.read ]) t -> 'aval equal : ('a -> 'a -> Core_kernel__.Import.bool) -> ('a, [> Perms.Export.read ]) t -> ('a, [> Perms.Export.read ]) t -> Core_kernel__.Import.boolval unsafe_truncate : (_, [> Perms.Export.write ]) t -> len:Core_kernel__.Import.int -> Core_kernel__.Import.unitval to_sequence : ('a, [> Perms.Export.read ]) t -> 'a Sequence.tval to_sequence_mutable : ('a, [> Perms.Export.read ]) t -> 'a Sequence.t