| Index: lib/src/result.dart | 
| diff --git a/lib/src/result.dart b/lib/src/result.dart | 
| index 482cf9baa435ae246f86713ceacf70223aaf9c87..393dcedd0da135ece88efda08c385eda9b82bdf7 100644 | 
| --- a/lib/src/result.dart | 
| +++ b/lib/src/result.dart | 
| @@ -72,20 +72,14 @@ abstract class Result<T> { | 
| factory Result.error(Object error, [StackTrace stackTrace]) => | 
| new ErrorResult(error, stackTrace); | 
|  | 
| -  // Helper functions. | 
| -  static _captureValue(value) => new ValueResult(value); | 
| -  static _captureError(error, stack) => new ErrorResult(error, stack); | 
| -  static _release(Result v) { | 
| -    if (v.isValue) return v.asValue.value;  // Avoid wrapping in future. | 
| -    return v.asFuture; | 
| -  } | 
| - | 
| /// Capture the result of a future into a `Result` future. | 
| /// | 
| /// The resulting future will never have an error. | 
| /// Errors have been converted to an [ErrorResult] value. | 
| -  static Future<Result> capture(Future future) { | 
| -    return future.then(_captureValue, onError: _captureError); | 
| +  static Future<Result/*<T>*/> capture/*<T>*/(Future/*<T>*/ future) { | 
| +    return future.then((value) => new ValueResult(value), | 
| +        onError: (error, stackTrace) => | 
| +            new ErrorResult/*<T>*/(error, stackTrace)); | 
| } | 
|  | 
| /// Release the result of a captured future. | 
| @@ -95,30 +89,23 @@ abstract class Result<T> { | 
| /// | 
| /// If [future] completes with an error, the returned future completes with | 
| /// the same error. | 
| -  static Future release(Future<Result> future) { | 
| -    return future.then(_release); | 
| -  } | 
| +  static Future/*<T>*/ release/*<T>*/(Future<Result/*<T>*/> future) => | 
| +      future.then/*<Future<T>>*/((result) => result.asFuture); | 
|  | 
| /// Capture the results of a stream into a stream of [Result] values. | 
| /// | 
| /// The returned stream will not have any error events. | 
| /// Errors from the source stream have been converted to [ErrorResult]s. | 
| -  /// | 
| -  /// Shorthand for transforming the stream using [captureStreamTransformer]. | 
| -  static Stream<Result> captureStream(Stream source) { | 
| -    return source.transform(captureStreamTransformer); | 
| -  } | 
| +  static Stream<Result/*<T>*/> captureStream/*<T>*/(Stream/*<T>*/ source) => | 
| +      source.transform(new CaptureStreamTransformer/*<T>*/()); | 
|  | 
| /// Release a stream of [result] values into a stream of the results. | 
| /// | 
| /// `Result` values of the source stream become value or error events in | 
| /// the returned stream as appropriate. | 
| /// Errors from the source stream become errors in the returned stream. | 
| -  /// | 
| -  /// Shorthand for transforming the stream using [releaseStreamTransformer]. | 
| -  static Stream releaseStream(Stream<Result> source) { | 
| -    return source.transform(releaseStreamTransformer); | 
| -  } | 
| +  static Stream/*<T>*/ releaseStream/*<T>*/(Stream<Result/*<T>*/> source) => | 
| +      source.transform(new ReleaseStreamTransformer/*<T>*/()); | 
|  | 
| /// Converts a result of a result to a single result. | 
| /// | 
| @@ -126,9 +113,10 @@ abstract class Result<T> { | 
| /// which is then an error, then a result with that error is returned. | 
| /// Otherwise both levels of results are value results, and a single | 
| /// result with the value is returned. | 
| -  static Result flatten(Result<Result> result) { | 
| -    if (result.isError) return result; | 
| -    return result.asValue.value; | 
| +  static Result/*<T>*/ flatten/*<T>*/(Result<Result/*<T>*/> result) { | 
| +    if (result.isValue) return result.asValue.value; | 
| +    return new ErrorResult/*<T>*/( | 
| +        result.asError.error, result.asError.stackTrace); | 
| } | 
|  | 
| /// Whether this result is a value result. | 
| @@ -149,7 +137,7 @@ abstract class Result<T> { | 
| /// If this is an error result, return itself. | 
| /// | 
| /// Otherwise return `null`. | 
| -  ErrorResult get asError; | 
| +  ErrorResult<T> get asError; | 
|  | 
| /// Complete a completer with this result. | 
| void complete(Completer<T> completer); | 
|  |