module InfiniteArray:`sig`

..`end`

This module implements infinite arrays. *

`type ``'a`

t

`val make : ``'a -> 'a t`

`make x`

creates an infinite array, where every slot contains `x`

. *`val get : ``'a t -> int -> 'a`

`get a i`

returns the element contained at offset `i`

in the array `a`

.
Slots are numbered 0 and up. *`val set : ``'a t -> int -> 'a -> unit`

`set a i x`

sets the element contained at offset `i`

in the array
`a`

to `x`

. Slots are numbered 0 and up. *`val extent : ``'a t -> int`

`extent a`

is the length of an initial segment of the array `a`

that is sufficiently large to contain all `set`

operations ever
performed. In other words, all elements beyond that segment have
the default value.`val domain : ``'a t -> 'a array`

`domain a`

is a fresh copy of an initial segment of the array `a`

whose length is `extent a`

.