    "Abstract supertype of resources which are created at the
     beginning of a `try` statement and destroyed when the
     statement completes. Unlike an [[Obtainable]] resource, a
     single instance of `Destroyable` may not be reused between
     multiple `try` statements or multiple executions of the
     same `try` statement.

         try (tx = Transaction()) {
             ...
         }

     - The resource is instantiated before the body of the `try`
       statement is executed, and
     - [[destroy]] is called when execution of the body of the
       `try` statement ends, even if an exception propagates out
       of the body of the `try`."
    see (`interface Obtainable`)
    tagged("Basic types")
    shared interface Destroyable satisfies Usable {

        "Destroy this resource. Called when execution of the
         body of the `try` statement ends, even if an exception
         propagates out of the body of the `try`."
        shared formal void destroy(
            "The exception propagating out of the body of the
             `try` statement, or `null` if no exception was
             propagated."
            Throwable? error);

    }