         return Promise<T>(work: { fulfill, reject in
             guard !promises.isEmpty else { fatalError() }
             for promise in promises {
-                promise.then({ value in
-                    fulfill(value)
-                }).onFailure({ error in
-                    reject(error)
-                })
+                promise.then(fulfill).onFailure(reject)
             }
         })
     }

                return self.delay(delay).then({
                    return retry(count: count-1, delay: delay, generate: generate)
                })
            }).then({ value in
                fulfill(value)
            }).onFailure({ error in
                reject(error)
            })
        })
    }
    

    
    func recover(recovery: (ErrorType) -> Promise<Value>) -> Promise<Value> {
        return Promise(work: { fulfill, reject in
            self.then(fulfill).onFailure({ error in
                recovery(error).then(fulfill).onFailure(reject)
            })
        })
    }
