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

        - returns: a new Future

    */
    public func map<T>(ec: ExecutionContextType = Pure, f: Value.Value -> T) -> Future<T, Value.Error> {
        return transform(ec, s: f, e: identity)
    }
    

        - returns: a new Future

    */
    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)
