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