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