sig
  val memory_footprint_var_name : string
  val cache_size : int
  module type Cacheable =
    sig
      type t
      val hash : Binary_cache.Cacheable.t -> int
      val sentinel : Binary_cache.Cacheable.t
      val equal :
        Binary_cache.Cacheable.t -> Binary_cache.Cacheable.t -> bool
    end
  module type Result = sig type t val sentinel : Binary_cache.Result.t end
  module Symmetric_Binary :
    functor (H : Cacheable) (R : Result->
      sig
        val clear : unit -> unit
        val merge : (H.t -> H.t -> R.t) -> H.t -> H.t -> R.t
      end
  module Binary_Predicate :
    functor (H0 : Cacheable) (H1 : Cacheable->
      sig
        val clear : unit -> unit
        val merge : (H0.t -> H1.t -> bool) -> H0.t -> H1.t -> bool
      end
  module Symmetric_Binary_Predicate :
    functor (H0 : Cacheable->
      sig
        val clear : unit -> unit
        val merge : (H0.t -> H0.t -> bool) -> H0.t -> H0.t -> bool
      end
  module Arity_One :
    functor (H : Cacheable) (R : Result->
      sig val clear : unit -> unit val merge : (H.t -> R.t) -> H.t -> R.t end
  module Arity_Two :
    functor (H0 : Cacheable) (H1 : Cacheable) (R : Result->
      sig
        val clear : unit -> unit
        val merge : (H0.t -> H1.t -> R.t) -> H0.t -> H1.t -> R.t
      end
  module Arity_Three :
    functor (H0 : Cacheable) (H1 : Cacheable) (H2 : Cacheable) (R : Result)
      ->
      sig
        val clear : unit -> unit
        val merge :
          (H0.t -> H1.t -> H2.t -> R.t) -> H0.t -> H1.t -> H2.t -> R.t
      end
end