`Tabulate.Make`

`Make`

constructs a tabulator for a finite type that is equipped with an implementation of imperative maps.

`module F : sig ... end`

`module M : sig ... end`

`type key = F.t`

The type of keys.

`tabulate`

is a tabulation combinator for the type `key`

. The function call `tabulate f`

produces a function `f'`

that behaves extensionally like `f`

, but is tabulated.

Like memoization, tabulation guarantees that, for every key `x`

, the image `f x`

is computed at most once. Unlike memoization, where this computation takes place on demand, here, the computation of `f x`

for every `x`

takes place eagerly, when `tabulate`

is invoked. The graph of the function `f`

, a table, is constructed and held in memory.