sig
  module MemoryFootprint :
    sig
      val self : Project.Computation.t
      val select :
        Kind.how ->
        Project.Computation.selection -> Project.Computation.selection
      val depend : Project.Computation.t -> unit
      val mark_as_computed : ?project:Project.project -> unit -> unit
      val is_computed : ?project:Project.project -> unit -> bool
      val do_not_save : unit -> unit
      module Datatype : Project.Datatype.S
      val name : string
      type data = int
      val set : data -> unit
      val get : unit -> data
      val clear : unit -> unit
    end
  module type WeakHashable =
    sig
      type t
      val equal : Buckx.WeakHashable.t -> Buckx.WeakHashable.t -> bool
      val hash : Buckx.WeakHashable.t -> int
      val pretty : Format.formatter -> Buckx.WeakHashable.t -> unit
      val id : string
    end
  module type S =
    sig
      type data
      type t
      val create : int -> Buckx.S.t
      val merge : Buckx.S.t -> Buckx.S.data -> Buckx.S.data
      val iter : Buckx.S.t -> (Buckx.S.data -> unit) -> unit
      val clear : Buckx.S.t -> unit
      val release : Buckx.S.t -> unit
      val shallow_copy : Buckx.S.t -> Buckx.S.t
      val overwrite : old:Buckx.S.t -> fresh:Buckx.S.t -> unit
      val pretty_debug : Format.formatter -> Buckx.S.t -> int -> unit
    end
  module MakeBig :
    functor (H : WeakHashable->
      sig
        type data = H.t
        type t
        val create : int -> t
        val merge : t -> data -> data
        val iter : t -> (data -> unit) -> unit
        val clear : t -> unit
        val release : t -> unit
        val shallow_copy : t -> t
        val overwrite : old:t -> fresh:t -> unit
        val pretty_debug : Format.formatter -> t -> int -> unit
      end
end