    // Constructing leaf futures
    fn empty ()             -> Future<T, E>
    fn ok    (T)            -> Future<T, E>
    fn err   (E)            -> Future<T, E>
    fn result(Result<T, E>) -> Future<T, E>

    // General future constructor
    fn poll_fn(FnMut(thread_local!(Task)) -> Poll<T, E>) -> Future<T, E>

    // Mapping futures
    fn Future::map     (Future<T, E>, FnOnce(T) -> U) -> Future<U, E>
    fn Future::map_err (Future<T, E>, FnOnce(E) -> F) -> Future<T, F>
    fn Future::from_err(Future<T, Into<E>>)           -> Future<T, E>

    // Chaining (sequencing) futures
    fn Future::then    (Future<T, E>, FnOnce(Result<T, E>) -> IntoFuture<U, F>) -> Future<U, F>
    fn Future::and_then(Future<T, E>, FnOnce(T)            -> IntoFuture<U, E>) -> Future<U, E>
    fn Future::or_else (Future<T, E>, FnOnce(E)            -> IntoFuture<T, F>) -> Future<T, F>
    fn Future::flatten (Future<Future<T, E>, Into<E>>)                          -> Future<T, E>

    // Joining (waiting) futures
    fn Future::join (Future<T, E>, IntoFuture<U, E>)                                                       -> Future<(T, U),          E>
    fn Future::join3(Future<T, E>, IntoFuture<U, E>, IntoFuture<V, E>)                                     -> Future<(T, U, V),       E>
    fn Future::join4(Future<T, E>, IntoFuture<U, E>, IntoFuture<V, E>, IntoFuture<W, E>)                   -> Future<(T, U, V, W),    E>
    fn Future::join5(Future<T, E>, IntoFuture<U, E>, IntoFuture<V, E>, IntoFuture<W, E>, IntoFuture<X, E>) -> Future<(T, U, V, W, X), E>
    fn join_all     (IntoIterator<IntoFuture<T, E>>)                                                       -> Future<Vec<T>,          E>

    // Selecting (racing) futures
    fn Future::select (Future<T, E>, IntoFuture<T, E>) -> Future<(T, Future<T, E>), (E, Future<T, E>)>
    fn Future::select2(Future<T, E>, IntoFuture<U, F>) -> Future<Either<(T, Future<U, F>), (U, Future<T, E>)>, Either<(E, Future<U, F>), (F, Future<T, E>)>>
    fn select_all     (IntoIterator<IntoFuture<T, E>>) -> Future<(T, usize, Vec<Future<T, E>>), (E, usize, Vec<Future<T, E>>)>
    fn select_ok      (IntoIterator<IntoFuture<T, E>>) -> Future<(T, Vec<Future<T, E>>), E>

    // Utility
    fn lazy         (FnOnce() -> IntoFuture<T, E>)             -> Future<T, E>
    fn loop_fn      (S, FnMut(S) -> IntoFuture<Loop<T, S>, E>) -> Future<T, E>

    // Miscellaneous
    fn Future::into_stream   (Future<T, E>)            -> Stream<T, E>
    fn Future::flatten_stream(Future<Stream<T, E>, E>) -> Stream<T, E>
    fn Future::fuse          (Future<T, E>)            -> Future<T, E>
    fn Future::catch_unwind  (Future<T, E>+UnwindSafe) -> Future<Result<T, E>, Any+Send>
    fn Future::shared        (Future<T, E>)            -> Future<SharedItem<T>, SharedError<E>>+Clone
    fn Future::wait          (Future<T, E>)            -> Result<T, E>