import "../../Operator/index.js";
import type { Option } from "../../Option/index.js";
import * as P from "../../Promise/index.js";
import * as T from "../_internal/effect.js";
import * as R from "../_internal/ref.js";
declare type State = Empty | Full;
declare class Empty {
readonly notifyConsumer: P.Promise;
readonly _tag = "Empty";
constructor(notifyConsumer: P.Promise);
}
declare class Full {
readonly a: A;
readonly notifyProducer: P.Promise;
readonly _tag = "Full";
constructor(a: A, notifyProducer: P.Promise);
}
/**
* 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: R.Ref>;
readonly _tag = "Handoff";
constructor(ref: R.Ref>);
}
export declare function make(): T.UIO>;
export declare function offer_(h: Handoff, a: A): T.UIO;
export declare function offer(a: A): (h: Handoff) => T.UIO;
export declare function take(h: Handoff): T.UIO;
export declare function poll(h: Handoff): T.UIO