sig
  type ('a, -'perms) t
  module Int :
    sig
      type 'perms t = (int, 'perms) t
      val blit :
        ([> Perms.Export.read ] t, [> Perms.Export.write ] t) Blit_intf.blit
      val blito :
        ([> Perms.Export.read ] t, [> Perms.Export.write ] t) Blit_intf.blito
      val sub :
        ([> Perms.Export.read ] t, [< 'Perms.Export.perms ] t)
        Blit_intf.sub
      val subo :
        ([> Perms.Export.read ] t, [< 'Perms.Export.perms ] t)
        Blit_intf.subo
      external unsafe_blit :
        src:[> Perms.Export.read ] Core_array.Permissioned.t ->
        src_pos:int ->
        dst:[> Perms.Export.write ] Core_array.Permissioned.t ->
        dst_pos:int -> len:int -> unit = "core_array_unsafe_int_blit"
        "noalloc"
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'perms) ->
        Sexplib.Sexp.t -> 'perms Core_array.Permissioned.t
      val sexp_of_t :
        ('perms -> Sexplib.Sexp.t) ->
        'perms Core_array.Permissioned.t -> Sexplib.Sexp.t
      val compare :
        ('perms -> 'perms -> int) ->
        'perms Core_array.Permissioned.t ->
        'perms Core_array.Permissioned.t -> int
      val bin_t :
        'perms Bin_prot.Type_class.t ->
        'perms Core_array.Permissioned.t Bin_prot.Type_class.t
      val bin_read_t :
        'perms Bin_prot.Read.reader ->
        'perms Core_array.Permissioned.t Bin_prot.Read.reader
      val __bin_read_t__ :
        'perms Bin_prot.Read.reader ->
        (int -> 'perms Core_array.Permissioned.t) Bin_prot.Read.reader
      val bin_reader_t :
        'perms Bin_prot.Type_class.reader ->
        'perms Core_array.Permissioned.t Bin_prot.Type_class.reader
      val bin_size_t :
        'perms Bin_prot.Size.sizer ->
        'perms Core_array.Permissioned.t Bin_prot.Size.sizer
      val bin_write_t :
        'perms Bin_prot.Write.writer ->
        'perms Core_array.Permissioned.t Bin_prot.Write.writer
      val bin_writer_t :
        'perms Bin_prot.Type_class.writer ->
        'perms Core_array.Permissioned.t Bin_prot.Type_class.writer
    end
  module Float :
    sig
      type 'perms t = (float, 'perms) t
      val blit :
        ([> Perms.Export.read ] t, [> Perms.Export.write ] t) Blit_intf.blit
      val blito :
        ([> Perms.Export.read ] t, [> Perms.Export.write ] t) Blit_intf.blito
      val sub :
        ([> Perms.Export.read ] t, [< 'Perms.Export.perms ] t)
        Blit_intf.sub
      val subo :
        ([> Perms.Export.read ] t, [< 'Perms.Export.perms ] t)
        Blit_intf.subo
      external unsafe_blit :
        src:[> Perms.Export.read ] Core_array.Permissioned.t ->
        src_pos:int ->
        dst:[> Perms.Export.write ] Core_array.Permissioned.t ->
        dst_pos:int -> len:int -> unit = "core_array_unsafe_float_blit"
        "noalloc"
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'perms) ->
        Sexplib.Sexp.t -> 'perms Core_array.Permissioned.t
      val sexp_of_t :
        ('perms -> Sexplib.Sexp.t) ->
        'perms Core_array.Permissioned.t -> Sexplib.Sexp.t
      val compare :
        ('perms -> 'perms -> int) ->
        'perms Core_array.Permissioned.t ->
        'perms Core_array.Permissioned.t -> int
      val bin_t :
        'perms Bin_prot.Type_class.t ->
        'perms Core_array.Permissioned.t Bin_prot.Type_class.t
      val bin_read_t :
        'perms Bin_prot.Read.reader ->
        'perms Core_array.Permissioned.t Bin_prot.Read.reader
      val __bin_read_t__ :
        'perms Bin_prot.Read.reader ->
        (int -> 'perms Core_array.Permissioned.t) Bin_prot.Read.reader
      val bin_reader_t :
        'perms Bin_prot.Type_class.reader ->
        'perms Core_array.Permissioned.t Bin_prot.Type_class.reader
      val bin_size_t :
        'perms Bin_prot.Size.sizer ->
        'perms Core_array.Permissioned.t Bin_prot.Size.sizer
      val bin_write_t :
        'perms Bin_prot.Write.writer ->
        'perms Core_array.Permissioned.t Bin_prot.Write.writer
      val bin_writer_t :
        'perms Bin_prot.Type_class.writer ->
        'perms Core_array.Permissioned.t Bin_prot.Type_class.writer
    end
  val of_array_id :
    'a array -> ('a, [< Perms.Export.read_write ]) Core_array.Permissioned.t
  val to_array_id :
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t -> 'a array
  val to_sequence_immutable :
    ('a, [> Perms.Export.immutable ]) Core_array.Permissioned.t ->
    'Sequence.t
  val mem :
    ?equal:('-> '-> bool) -> ('a, [> Perms.Export.read ]) t -> '-> bool
  val iter : ('a, [> Perms.Export.read ]) t -> f:('-> unit) -> unit
  val fold :
    ('a, [> Perms.Export.read ]) t ->
    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
  val exists : ('a, [> Perms.Export.read ]) t -> f:('-> bool) -> bool
  val for_all : ('a, [> Perms.Export.read ]) t -> f:('-> bool) -> bool
  val count : ('a, [> Perms.Export.read ]) t -> f:('-> bool) -> int
  val sum :
    (module Commutative_group.S with type t = 'sum) ->
    ('a, [> Perms.Export.read ]) t -> f:('-> 'sum) -> 'sum
  val find : ('a, [> Perms.Export.read ]) t -> f:('-> bool) -> 'a option
  val find_map :
    ('a, [> Perms.Export.read ]) t -> f:('-> 'b option) -> 'b option
  val to_list : ('a, [> Perms.Export.read ]) t -> 'a list
  val to_array : ('a, [> Perms.Export.read ]) t -> 'a array
  val min_elt :
    ('a, [> Perms.Export.read ]) t -> cmp:('-> '-> int) -> 'a option
  val max_elt :
    ('a, [> Perms.Export.read ]) t -> cmp:('-> '-> int) -> 'a option
  val blit :
    (('a, [> Perms.Export.read ]) t, ('a, [> Perms.Export.write ]) t)
    Blit_intf.blit
  val blito :
    (('a, [> Perms.Export.read ]) t, ('a, [> Perms.Export.write ]) t)
    Blit_intf.blito
  val unsafe_blit :
    (('a, [> Perms.Export.read ]) t, ('a, [> Perms.Export.write ]) t)
    Blit_intf.blit
  val sub :
    (('a, [> Perms.Export.read ]) t, ('a, [< 'Perms.Export.perms ]) t)
    Blit_intf.sub
  val subo :
    (('a, [> Perms.Export.read ]) t, ('a, [< 'Perms.Export.perms ]) t)
    Blit_intf.subo
  val binary_search :
    (('a, [> Perms.Export.read ]) t, 'a) Binary_searchable_intf.binary_search
  val binary_search_segmented :
    (('a, [> Perms.Export.read ]) t, 'a)
    Binary_searchable_intf.binary_search_segmented
  val length : ('a, 'b) Core_array.Permissioned.t -> int
  val is_empty : ('a, 'b) Core_array.Permissioned.t -> bool
  external get :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> int -> 'a
    = "%array_safe_get"
  external set :
    ('a, [> Perms.Export.write ]) Core_array.Permissioned.t ->
    int -> '-> unit = "%array_safe_set"
  external unsafe_get :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> int -> 'a
    = "%array_unsafe_get"
  external unsafe_set :
    ('a, [> Perms.Export.write ]) Core_array.Permissioned.t ->
    int -> '-> unit = "%array_unsafe_set"
  val create :
    len:int ->
    '-> ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val init :
    int ->
    f:(int -> 'a) ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val make_matrix :
    dimx:int ->
    dimy:int ->
    '->
    (('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t,
     [< 'Perms.Export.perms ])
    Core_array.Permissioned.t
  val append :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val concat :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t list ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val copy :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val fill :
    ('a, [> Perms.Export.write ]) Core_array.Permissioned.t ->
    pos:int -> len:int -> '-> unit
  val of_list :
    'a list -> ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val map :
    f:('-> 'b) ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val iteri :
    f:(int -> '-> unit) ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> unit
  val mapi :
    f:(int -> '-> 'b) ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val foldi :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    init:'-> f:(int -> '-> '-> 'b) -> 'b
  val fold_right :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> '-> 'b) -> init:'-> 'b
  val sort :
    ?pos:int ->
    ?len:int ->
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t ->
    cmp:('-> '-> int) -> unit
  val stable_sort :
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t ->
    cmp:('-> '-> int) -> unit
  val is_sorted :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    cmp:('-> '-> int) -> bool
  val is_sorted_strictly :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    cmp:('-> '-> int) -> bool
  val concat_map :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> ('b, [> Perms.Export.read ]) Core_array.Permissioned.t) ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val partition_tf :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> bool) ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t *
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val partitioni_tf :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:(int -> '-> bool) ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t *
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val cartesian_product :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a * 'b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val normalize : ('a, 'b) Core_array.Permissioned.t -> int -> int
  val slice :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    int -> int -> ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val nget :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> int -> 'a
  val nset :
    ('a, [> Perms.Export.write ]) Core_array.Permissioned.t ->
    int -> '-> unit
  val filter_opt :
    ('a option, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val filter_map :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> 'b option) ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val filter_mapi :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:(int -> '-> 'b option) ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val iter2_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> '-> unit) -> unit
  val map2_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> '-> 'c) ->
    ('c, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val fold2_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    init:'-> f:('-> '-> '-> 'c) -> 'c
  val for_all2_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> '-> bool) -> bool
  val filter :
    f:('-> bool) ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val filteri :
    f:(int -> '-> bool) ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val swap :
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t ->
    int -> int -> unit
  val rev_inplace :
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t -> unit
  val of_list_rev :
    'a list -> ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val of_list_map :
    'a list ->
    f:('-> 'b) ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val of_list_rev_map :
    'a list ->
    f:('-> 'b) ->
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val replace :
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t ->
    int -> f:('-> 'a) -> unit
  val replace_all :
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t ->
    f:('-> 'a) -> unit
  val find_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> bool) -> 'a
  val findi :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:(int -> '-> bool) -> (int * 'a) option
  val findi_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:(int -> '-> bool) -> int * 'a
  val find_consecutive_duplicate :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    equal:('-> '-> bool) -> ('a * 'a) option
  val reduce :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> '-> 'a) -> 'a option
  val reduce_exn :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    f:('-> '-> 'a) -> 'a
  val permute :
    ?random_state:Core_random.State.t ->
    ('a, [> Perms.Export.read_write ]) Core_array.Permissioned.t -> unit
  val combine :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a * 'b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val split :
    ('a * 'b, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t *
    ('b, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val sorted_copy :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    cmp:('-> '-> int) ->
    ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val last : ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> 'a
  val empty :
    unit -> ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
  val equal :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
    equal:('-> '-> bool) -> bool
  val truncate :
    ('a, [> Perms.Export.write ]) Core_array.Permissioned.t ->
    len:int -> unit
  module Infix :
    sig
      val ( <|> ) :
        ('a, [> Perms.Export.read ]) Core_array.Permissioned.t ->
        int * int ->
        ('a, [< 'Perms.Export.perms ]) Core_array.Permissioned.t
    end
  val to_sequence :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> 'Sequence.t
  val to_sequence_mutable :
    ('a, [> Perms.Export.read ]) Core_array.Permissioned.t -> 'Sequence.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) ->
    (Sexplib.Sexp.t -> 'perms) ->
    Sexplib.Sexp.t -> ('a, 'perms) Core_array.Permissioned.t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) ->
    ('perms -> Sexplib.Sexp.t) ->
    ('a, 'perms) Core_array.Permissioned.t -> Sexplib.Sexp.t
  val compare :
    ('-> '-> int) ->
    ('perms -> 'perms -> int) ->
    ('a, 'perms) Core_array.Permissioned.t ->
    ('a, 'perms) Core_array.Permissioned.t -> int
  val bin_t :
    'Bin_prot.Type_class.t ->
    'perms Bin_prot.Type_class.t ->
    ('a, 'perms) Core_array.Permissioned.t Bin_prot.Type_class.t
  val bin_read_t :
    'Bin_prot.Read.reader ->
    'perms Bin_prot.Read.reader ->
    ('a, 'perms) Core_array.Permissioned.t Bin_prot.Read.reader
  val __bin_read_t__ :
    'Bin_prot.Read.reader ->
    'perms Bin_prot.Read.reader ->
    (int -> ('a, 'perms) Core_array.Permissioned.t) Bin_prot.Read.reader
  val bin_reader_t :
    'Bin_prot.Type_class.reader ->
    'perms Bin_prot.Type_class.reader ->
    ('a, 'perms) Core_array.Permissioned.t Bin_prot.Type_class.reader
  val bin_size_t :
    'Bin_prot.Size.sizer ->
    'perms Bin_prot.Size.sizer ->
    ('a, 'perms) Core_array.Permissioned.t Bin_prot.Size.sizer
  val bin_write_t :
    'Bin_prot.Write.writer ->
    'perms Bin_prot.Write.writer ->
    ('a, 'perms) Core_array.Permissioned.t Bin_prot.Write.writer
  val bin_writer_t :
    'Bin_prot.Type_class.writer ->
    'perms Bin_prot.Type_class.writer ->
    ('a, 'perms) Core_array.Permissioned.t Bin_prot.Type_class.writer
end