         - returns: A new Future with value or nil
 
     */
-    public func filter(ec: ExecutionContextType = Pure, p: Value.Value -> Bool) -> Future<Value.Value?, Value.Error> {
+    public func filter(ec: ExecutionContextType = Pure, p: Success -> Bool) -> Future<Success?, Error> {
         return map(ec) { x in p(x) ? x : nil }
     }
 

        - returns: a new Future

    */
    public func flatMap<F: FutureType where F.Value.Error == Value.Error>(ec: ExecutionContextType = Pure, f: Value.Value -> F) -> Future<F.Value.Value, Value.Error> {
        let p = Promise<F.Value.Value, Value.Error>()
        
        onComplete(ec) { result in
            result.analysis(ifSuccess: { value in

        - returns: flattened Future

    */
    public func flatten() -> Future<InnerFuture.Value.Value, Value.Error> {
        let p = Promise<InnerFuture.Value.Value, Value.Error>()
        
        onComplete(Pure) { result in
            result.analysis(ifSuccess: { value in
