         - returns: a new Future
 
     */
-    public func recoverWith(ec: ExecutionContextType = Pure, r: Value.Error -> Self) -> Future<Value.Value, Value.Error> {
-        let p = Promise<Value.Value, Value.Error>()
+    public func recoverWith(ec: ExecutionContextType = Pure, r: Value.Error -> Self) -> Future<Success, Error> {
+        let p = Promise<Success, Error>()
         onComplete(ec) { result in
             result.analysis(ifSuccess: { value in
                 p.success(value)

        - returns: Deferred

    */
    public func toDeferred() -> Deferred<Result<Value.Value, Value.Error>> {
        let p = PurePromise<Result<Value.Value, Value.Error>>()
        onComplete(Pure) { result in
            p.complete(Result(result: result))
        }

        - returns: Deferred with success value of `fx` or result of `r`

    */
    public func toDeferred(ec: ExecutionContextType = Pure, r: Error -> Success) -> Deferred<Success> {
        let p = PurePromise<Success>()
        onComplete(ec) { result in
            result.analysis(ifSuccess: { value in
                p.complete(value)
