sig
val memo : ?size:int -> ('a -> 'b) -> 'a -> 'b
val memo_recursive : ?size:int -> (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b
module Make :
functor (M : Hashtbl.HashedType) ->
sig
val memo : ?size:int -> (M.t -> 'a) -> M.t -> 'a
val memo_recursive :
?size:int -> ((M.t -> 'a) -> M.t -> 'a) -> M.t -> 'a
end
module Tabulate :
sig
module type Fun =
sig
type dom
type cod
val f :
Memo.Tabulate.Fun.dom -> (Memo.Tabulate.Fun.cod -> unit) -> unit
val hash : Memo.Tabulate.Fun.dom -> int
val join :
Memo.Tabulate.Fun.cod ->
Memo.Tabulate.Fun.cod -> Memo.Tabulate.Fun.cod
val bottom : Memo.Tabulate.Fun.cod
val dom_equal :
Memo.Tabulate.Fun.dom -> Memo.Tabulate.Fun.dom -> bool
val cod_equal :
Memo.Tabulate.Fun.cod -> Memo.Tabulate.Fun.cod -> bool
end
module type RecFun =
sig
type dom
type cod
val f :
(Memo.Tabulate.RecFun.dom ->
(Memo.Tabulate.RecFun.cod -> unit) -> unit) ->
Memo.Tabulate.RecFun.dom ->
(Memo.Tabulate.RecFun.cod -> unit) -> unit
val hash : Memo.Tabulate.RecFun.dom -> int
val join :
Memo.Tabulate.RecFun.cod ->
Memo.Tabulate.RecFun.cod -> Memo.Tabulate.RecFun.cod
val bottom : Memo.Tabulate.RecFun.cod
val dom_equal :
Memo.Tabulate.RecFun.dom -> Memo.Tabulate.RecFun.dom -> bool
val cod_equal :
Memo.Tabulate.RecFun.cod -> Memo.Tabulate.RecFun.cod -> bool
end
module type S =
sig
type dom
type cod
val update : Memo.Tabulate.S.dom -> Memo.Tabulate.S.cod -> unit
val call :
Memo.Tabulate.S.dom -> (Memo.Tabulate.S.cod -> unit) -> unit
val call_direct : Memo.Tabulate.S.dom -> Memo.Tabulate.S.cod
end
module Make :
functor (F : Fun) ->
sig
type dom = F.dom
type cod = F.cod
val update : dom -> cod -> unit
val call : dom -> (cod -> unit) -> unit
val call_direct : dom -> cod
end
module MakeRec :
functor (F : RecFun) ->
sig
type dom = F.dom
type cod = F.cod
val update : dom -> cod -> unit
val call : dom -> (cod -> unit) -> unit
val call_direct : dom -> cod
end
end
end