import type { Option } from "../../../Option";
import * as T from "../../Task";
import * as XP from "../../XPromise";
import * as XR from "../../XRef";
declare type State = Empty | Full;
declare class Empty {
readonly notifyConsumer: XP.XPromise;
readonly _tag = "Empty";
constructor(notifyConsumer: XP.XPromise);
}
declare class Full {
readonly a: A;
readonly notifyProducer: XP.XPromise;
readonly _tag = "Full";
constructor(a: A, notifyProducer: XP.XPromise);
}
/**
* A synchronous queue-like abstraction that allows a producer to offer
* an element and wait for it to be taken, and allows a consumer to wait
* for an element to be available.
*/
declare class Handoff {
readonly ref: XR.Ref>;
readonly _tag = "Handoff";
constructor(ref: XR.Ref>);
}
export declare function make(): T.IO>;
export declare function offer(a: A): (h: Handoff) => T.IO;
export declare function take(h: Handoff): T.IO;
export declare function poll(h: Handoff): T.IO