module Context : sig ... end
type 'a t
Work in progress representation of a computation. This is mostly used to handle
recursive types. While building a computation on a recursive type, one needs to have
some computation available for the location where the type appears recursively.
init
will be called once on each new type_name met during the traversal of a type.
Each time the same type is encountered again, get_wip_computation
will be called.
At the end of the traversal of that particular type, set_final_computation
will be
called, offering as a way to "close" the wip representation. 'a t
can be mutable
(and is likely to be in practice).
After a set_final_computation
is performed and return a final computation C for a
type_name, C will be memoized and returned for each further occurrences of the same
type_name inside the typerep, going further on.
val init : Context.t ‑> 'a Typename.t ‑> 'a t
val get_wip_computation : 'a t ‑> 'a computation
val set_final_computation : 'a t ‑> 'a computation ‑> 'a computation