 
     public var output: Pending<ProcedureResult<Output>> = .pending
 
-    private let block: ThrowingCancellableOutputBlock
+    public let block: ThrowingCancellableOutputBlock
 
     public init(cancellableBlock: @escaping ThrowingCancellableOutputBlock) {
         self.block = cancellableBlock


    public var output: Pending<ProcedureResult<Output>> = .pending

    private let block: ThrowingOutputBlock

    public init(block: @escaping ThrowingOutputBlock) {
        self.block = block

}

open class CancellableBlockProcedure: CancellableResultProcedure<Void> { }

/*
 A block based procedure which execute the provided block on the UI/main thread.
 */
open class UIBlockProcedure: AsyncBlockProcedure {

    public typealias ThrowingOutputBlock = () throws -> Output

    public init(block: @escaping ThrowingOutputBlock) {
        super.init { finishWithResult in
            let sub = BlockProcedure(block: block)
            sub.addDidFinishBlockObserver { (_, errors) in
                finishWithResult(.failure(ProcedureKitError.dependency(finishedWithErrors: errors)))
            }
            sub.addDidCancelBlockObserver { (_, errors) in
                finishWithResult(.failure(ProcedureKitError.dependency(cancelledWithErrors: errors)))
            }

            ProcedureQueue.main.add(operation: BlockProcedure(block: block))
        }
    }
}
