         }
     }
     
-    public func `catch`(_ closure: (error: ErrorProtocol) -> Void) {
+    public func `catch`(_ closure: (error: Error) -> Void) {
         _ = then(fulfilment: nil, rejection: closure)
     }
     
-    public func recover(_ closure: (error: ErrorProtocol) -> Promise) -> Promise {
+    public func recover(_ closure: (error: Error) -> Promise) -> Promise {
         return Promise() { fulfill, reject in
             _ = then(
                 fulfilment: { _ = fulfill(value: $0) }, // bubble up value

        }
    }
    
    public func then(fulfilment: ((value: T) -> Void)?, rejection: ((error: ErrorProtocol) -> Void)?) -> Promise {
        completion { resolution in
            switch resolution {
            case let .fulfilled(val): fulfilment?(value: val)

}

public enum Resolution<T> {
    case fulfilled(T), rejected(Error)
}
