sig
  type ('a, 'b) unary =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler -> '-> Exception.method_handler * 'b
  type ('a, 'b, 'c) binary =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler -> '-> '-> Exception.method_handler * 'c
  type ('a, 'b, 'c, 'd) ternary =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler ->
      '-> '-> '-> Exception.method_handler * 'd
  type ('a, 'b, 'c, 'd, 'e) quaternary =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler ->
      '-> '-> '-> '-> Exception.method_handler * 'e
  type 'a unary_no_output =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler -> '-> Exception.method_handler
  type ('a, 'b) binary_no_output =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler -> '-> '-> Exception.method_handler
  module type Storage =
    sig
      type 'a t
      type key
      type dimension
      val create :
        (Int_storage.Storage.dimension, 'Int_storage.Storage.t)
        Int_storage.unary
      val create_biggest_key :
        (Int_storage.Storage.key, 'Int_storage.Storage.t) Int_storage.unary
      val expand_and_copy :
        ('Int_storage.Storage.t, Int_storage.Storage.dimension,
         'Int_storage.Storage.t)
        Int_storage.binary
      val init :
        (Int_storage.Storage.dimension,
         (Int_storage.Storage.key, 'a) Int_storage.unary,
         'Int_storage.Storage.t)
        Int_storage.binary
      val set :
        (Int_storage.Storage.key, 'a, 'Int_storage.Storage.t,
         'Int_storage.Storage.t)
        Int_storage.ternary
      val free :
        (Int_storage.Storage.key, 'Int_storage.Storage.t,
         'Int_storage.Storage.t)
        Int_storage.binary
      val get :
        (Int_storage.Storage.key, 'Int_storage.Storage.t, 'a option)
        Int_storage.binary
      val unsafe_get :
        (Int_storage.Storage.key, 'Int_storage.Storage.t, 'a option)
        Int_storage.binary
      val dimension :
        ('Int_storage.Storage.t, Int_storage.Storage.dimension)
        Int_storage.unary
      val print :
        ('Int_storage.unary_no_output, 'Int_storage.Storage.t)
        Int_storage.binary_no_output
      val key_list :
        ('Int_storage.Storage.t, Int_storage.Storage.key list)
        Int_storage.unary
      val iter :
        ((Int_storage.Storage.key, 'a) Int_storage.binary_no_output,
         'Int_storage.Storage.t)
        Int_storage.binary_no_output
      val fold_with_interruption :
        ((Int_storage.Storage.key, 'a, 'b, 'b) Int_storage.ternary,
         'Int_storage.Storage.t, 'b, 'b)
        Int_storage.ternary
      val fold :
        ((Int_storage.Storage.key, 'a, 'b, 'b) Int_storage.ternary,
         'Int_storage.Storage.t, 'b, 'b)
        Int_storage.ternary
      val fold2_common :
        ((Int_storage.Storage.key, 'a, 'b, 'c, 'c) Int_storage.quaternary,
         'Int_storage.Storage.t, 'Int_storage.Storage.t, 'c, 'c)
        Int_storage.quaternary
      val free_all :
        ('Int_storage.Storage.t, 'Int_storage.Storage.t)
        Int_storage.unary
    end
  module Extend :
    functor (Extension : Storage) (Underlying : Storage->
      sig
        type 'a t
        type key = Extension.key * Underlying.key
        type dimension = Extension.dimension * Underlying.dimension
        val create : (dimension, 'a t) unary
        val create_biggest_key : (key, 'a t) unary
        val expand_and_copy : ('a t, dimension, 'a t) binary
        val init : (dimension, (key, 'a) unary, 'a t) binary
        val set : (key, 'a, 'a t, 'a t) ternary
        val free : (key, 'a t, 'a t) binary
        val get : (key, 'a t, 'a option) binary
        val unsafe_get : (key, 'a t, 'a option) binary
        val dimension : ('a t, dimension) unary
        val print : ('a unary_no_output, 'a t) binary_no_output
        val key_list : ('a t, key list) unary
        val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
        val fold_with_interruption :
          ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
        val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
        val fold2_common :
          ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
        val free_all : ('a t, 'a t) unary
      end
  module Quick_key_list :
    functor (Basic : Storage->
      sig
        type 'a t
        type key = Basic.key
        type dimension = Basic.dimension
        val create : (dimension, 'a t) unary
        val create_biggest_key : (key, 'a t) unary
        val expand_and_copy : ('a t, dimension, 'a t) binary
        val init : (dimension, (key, 'a) unary, 'a t) binary
        val set : (key, 'a, 'a t, 'a t) ternary
        val free : (key, 'a t, 'a t) binary
        val get : (key, 'a t, 'a option) binary
        val unsafe_get : (key, 'a t, 'a option) binary
        val dimension : ('a t, dimension) unary
        val print : ('a unary_no_output, 'a t) binary_no_output
        val key_list : ('a t, key list) unary
        val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
        val fold_with_interruption :
          ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
        val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
        val fold2_common :
          ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
        val free_all : ('a t, 'a t) unary
      end
  module Int_storage_imperatif :
    sig
      type 'a t
      type key = int
      type dimension = int
      val create : (dimension, 'a t) unary
      val create_biggest_key : (key, 'a t) unary
      val expand_and_copy : ('a t, dimension, 'a t) binary
      val init : (dimension, (key, 'a) unary, 'a t) binary
      val set : (key, 'a, 'a t, 'a t) ternary
      val free : (key, 'a t, 'a t) binary
      val get : (key, 'a t, 'a option) binary
      val unsafe_get : (key, 'a t, 'a option) binary
      val dimension : ('a t, dimension) unary
      val print : ('a unary_no_output, 'a t) binary_no_output
      val key_list : ('a t, key list) unary
      val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
      val fold_with_interruption :
        ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold2_common :
        ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
      val free_all : ('a t, 'a t) unary
    end
  module Nearly_infinite_arrays :
    functor
      (Basic : sig
                 type 'a t
                 type key = int
                 type dimension = int
                 val create : (dimension, 'a t) unary
                 val create_biggest_key : (key, 'a t) unary
                 val expand_and_copy : ('a t, dimension, 'a t) binary
                 val init : (dimension, (key, 'a) unary, 'a t) binary
                 val set : (key, 'a, 'a t, 'a t) ternary
                 val free : (key, 'a t, 'a t) binary
                 val get : (key, 'a t, 'a option) binary
                 val unsafe_get : (key, 'a t, 'a option) binary
                 val dimension : ('a t, dimension) unary
                 val print : ('a unary_no_output, 'a t) binary_no_output
                 val key_list : ('a t, key list) unary
                 val iter :
                   ((key, 'a) binary_no_output, 'a t) binary_no_output
                 val fold_with_interruption :
                   ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
                 val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
                 val fold2_common :
                   ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c)
                   quaternary
                 val free_all : ('a t, 'a t) unary
               end->
      sig
        type 'a t
        type key = int
        type dimension = int
        val create : (dimension, 'a t) unary
        val create_biggest_key : (key, 'a t) unary
        val expand_and_copy : ('a t, dimension, 'a t) binary
        val init : (dimension, (key, 'a) unary, 'a t) binary
        val set : (key, 'a, 'a t, 'a t) ternary
        val free : (key, 'a t, 'a t) binary
        val get : (key, 'a t, 'a option) binary
        val unsafe_get : (key, 'a t, 'a option) binary
        val dimension : ('a t, dimension) unary
        val print : ('a unary_no_output, 'a t) binary_no_output
        val key_list : ('a t, key list) unary
        val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
        val fold_with_interruption :
          ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
        val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
        val fold2_common :
          ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
        val free_all : ('a t, 'a t) unary
      end
  module Nearly_inf_Imperatif :
    sig
      type 'a t
      type key = int
      type dimension = int
      val create : (dimension, 'a t) unary
      val create_biggest_key : (key, 'a t) unary
      val expand_and_copy : ('a t, dimension, 'a t) binary
      val init : (dimension, (key, 'a) unary, 'a t) binary
      val set : (key, 'a, 'a t, 'a t) ternary
      val free : (key, 'a t, 'a t) binary
      val get : (key, 'a t, 'a option) binary
      val unsafe_get : (key, 'a t, 'a option) binary
      val dimension : ('a t, dimension) unary
      val print : ('a unary_no_output, 'a t) binary_no_output
      val key_list : ('a t, key list) unary
      val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
      val fold_with_interruption :
        ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold2_common :
        ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
      val free_all : ('a t, 'a t) unary
    end
  module Quick_Nearly_inf_Imperatif :
    sig
      type 'a t
      type key = int
      type dimension = int
      val create : (dimension, 'a t) unary
      val create_biggest_key : (key, 'a t) unary
      val expand_and_copy : ('a t, dimension, 'a t) binary
      val init : (dimension, (key, 'a) unary, 'a t) binary
      val set : (key, 'a, 'a t, 'a t) ternary
      val free : (key, 'a t, 'a t) binary
      val get : (key, 'a t, 'a option) binary
      val unsafe_get : (key, 'a t, 'a option) binary
      val dimension : ('a t, dimension) unary
      val print : ('a unary_no_output, 'a t) binary_no_output
      val key_list : ('a t, key list) unary
      val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
      val fold_with_interruption :
        ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold2_common :
        ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
      val free_all : ('a t, 'a t) unary
    end
  module Int_Int_storage_Imperatif_Imperatif :
    sig
      type 'a t
      type key = int * int
      type dimension = int * int
      val create : (dimension, 'a t) unary
      val create_biggest_key : (key, 'a t) unary
      val expand_and_copy : ('a t, dimension, 'a t) binary
      val init : (dimension, (key, 'a) unary, 'a t) binary
      val set : (key, 'a, 'a t, 'a t) ternary
      val free : (key, 'a t, 'a t) binary
      val get : (key, 'a t, 'a option) binary
      val unsafe_get : (key, 'a t, 'a option) binary
      val dimension : ('a t, dimension) unary
      val print : ('a unary_no_output, 'a t) binary_no_output
      val key_list : ('a t, key list) unary
      val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
      val fold_with_interruption :
        ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold2_common :
        ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
      val free_all : ('a t, 'a t) unary
    end
  module Nearly_Inf_Int_Int_storage_Imperatif_Imperatif :
    sig
      type 'a t
      type key = int * int
      type dimension = int * int
      val create : (dimension, 'a t) unary
      val create_biggest_key : (key, 'a t) unary
      val expand_and_copy : ('a t, dimension, 'a t) binary
      val init : (dimension, (key, 'a) unary, 'a t) binary
      val set : (key, 'a, 'a t, 'a t) ternary
      val free : (key, 'a t, 'a t) binary
      val get : (key, 'a t, 'a option) binary
      val unsafe_get : (key, 'a t, 'a option) binary
      val dimension : ('a t, dimension) unary
      val print : ('a unary_no_output, 'a t) binary_no_output
      val key_list : ('a t, key list) unary
      val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
      val fold_with_interruption :
        ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold2_common :
        ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
      val free_all : ('a t, 'a t) unary
    end
  module Nearly_Inf_Int_Int_Int_storage_Imperatif_Imperatif_Imperatif :
    sig
      type 'a t
      type key = int * (int * int)
      type dimension = int * (int * int)
      val create : (dimension, 'a t) unary
      val create_biggest_key : (key, 'a t) unary
      val expand_and_copy : ('a t, dimension, 'a t) binary
      val init : (dimension, (key, 'a) unary, 'a t) binary
      val set : (key, 'a, 'a t, 'a t) ternary
      val free : (key, 'a t, 'a t) binary
      val get : (key, 'a t, 'a option) binary
      val unsafe_get : (key, 'a t, 'a option) binary
      val dimension : ('a t, dimension) unary
      val print : ('a unary_no_output, 'a t) binary_no_output
      val key_list : ('a t, key list) unary
      val iter : ((key, 'a) binary_no_output, 'a t) binary_no_output
      val fold_with_interruption :
        ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold : ((key, 'a, 'b, 'b) ternary, 'a t, 'b, 'b) ternary
      val fold2_common :
        ((key, 'a, 'b, 'c, 'c) quaternary, 'a t, 'b t, 'c, 'c) quaternary
      val free_all : ('a t, 'a t) unary
    end
end