Durable is designed to help recover from simple errors when using mutable data types that silently fail and can be easily rebuilt or created anew. A clear candidate is Rpc.Connection.t
to_create tells the Durable how to build a fresh 'a value.
is_broken tests whether the current 'a value can be used. It should return true when
you want the Durable to attempt to rebuild or recreate the 'a.
to_rebuild Is called on the broken 'a. It should return a "fixed" 'a.
When the function
with_ below is called, it uses
is_broken to test if the current
Durable value is broken. If not, it calls either
to_rebuild is None (as in the default case), the Durable will try to create a fresh
create does not create the Durable value. The first call to
to_create will be made
on the first use of
create_or_fail immediately calls
to_create, returning an error if that first
attempt fails. This function will also return an error if the initial durable value is
with_ applies the given function to the Durable value if
is_broken return true, it first calls
function will return an error if either
to_rebuild returns an error,
or if the rebuilt or recreated durable value is broken.
is_broken is checked
immediately before calling
We will only make one attempt to rebuild a broken value. If a call to
Error _, we will drop the previously built value. The next call to
with_ will raise if