         return self.value ?? value()
     }
 
-    public func recoverWith(_ result: @autoclosure () -> Result<T, E>) -> Result<T, E> {
+    public func recover(_ result: @autoclosure () -> Result<T, E>) -> Result<T, E> {
         return map(success: { _ in self }, failure: { _ in result() })
     }
 

            case .success(let value):
                return value
            case .failure(let error as Error):
                throw error as Error
            default:
                fatalError("E should adopt Error.")
        }
    }


}

public func ?? <T, E> (left: Result<T, E>, right: @autoclosure () -> Result<T, E>) -> Result<T, E> {
    return left.recover(right())
}
