import type { Option } from "../Option";
import type { Result } from "../Result";
import { OnceIterator } from "../Iterator";
export declare class Task<T> {
    private readonly f;
    constructor(f: () => Promise<T>);
    unsafeRun(): Promise<T>;
    map<B>(f: (a: T) => B): Task<B>;
    flatMap<B>(f: (a: T) => Task<B>): Task<B>;
    filter(predicate: (arg: T) => boolean): Task<Option<T>>;
    and<B>(that: Task<B>): Task<B>;
    expect(msg: string): Task<T>;
    inspect(f: (v: T) => void): Task<T>;
    mapOr<B>(def: B, f: (a: T) => B): Task<B>;
    mapOrElse<B>(d: () => B, f: (a: T) => B): Task<B>;
    okOr<E>(error: E): Task<Result<T, E>>;
    okOrElse<E>(f: () => E): Task<Result<T, E>>;
    or(that: Task<T>): Task<T>;
    orElse(f: () => Task<T>): Task<T>;
    unwrap(): Task<T>;
    unwrapOr(def: T): Task<T>;
    unwrapOrElse(f: () => T): Task<T>;
    safeRun(): Promise<Result<T, unknown>>;
    [Symbol.iterator](): OnceIterator<Task<T>, T>;
}
export declare const createTask: <T>(f: () => Promise<T>) => Task<T>;
