An object of type restart represents a function that can be called to perform some form of recovery action, usually a transfer of control to an outer point in the running program.
An implementation is free to implement a restart in whatever manner is most convenient; a restart has only dynamic extent relative to the scope of the binding form which establishes it.