import { Equals } from "@tsplus/stdlib/structure/Equals";
import { Hash } from "@tsplus/stdlib/structure/Hash";
import { Eval } from "@tsplus/stdlib/io/Eval/definition";
import { List } from "@tsplus/stdlib/collections/List/definition";
import { HashSet } from "@tsplus/stdlib/collections/HashSet/definition";
export declare const ParSeqSym: unique symbol;
export type ParSeqSym = typeof ParSeqSym;
export declare const _A: unique symbol;
export type _A = typeof _A;
/**
* `ParSeq` is a data type that represents some notion of "events" that can
* take place in parallel or in sequence. For example, a `ParSeq`
* parameterized on some error type could be used to model the potentially
* multiple ways that an application can fail. On the other hand, a `ParSeq`
* parameterized on some request type could be used to model a collection of
* requests to external data sources, some of which could be executed in
* parallel and some of which must be executed sequentially.
*
* @tsplus type ParSeq
*/
export type ParSeq = Empty | Single | Then | Both;
/**
* @tsplus type ParSeq.Ops
*/
export interface ParSeqOps {
$: ParSeqAspects;
}
export declare const ParSeq: ParSeqOps;
/**
* @tsplus type ParSeq.Aspects
*/
export interface ParSeqAspects {
}
/**
* @tsplus type ParSeq/Empty
*/
export declare class Empty implements Equals {
readonly _tag = "Empty";
readonly [ParSeqSym]: ParSeqSym;
readonly [_A]: () => never;
[Equals.sym](that: unknown): boolean;
[Hash.sym](): number;
equalsSafe(that: ParSeq): Eval;
}
/**
* @tsplus type ParSeq/Single
*/
export declare class Single implements Equals {
readonly a: A;
readonly _tag = "Single";
readonly [ParSeqSym]: ParSeqSym;
readonly [_A]: () => A;
constructor(a: A);
[Equals.sym](that: unknown): boolean;
[Hash.sym](): number;
equalsSafe(that: ParSeq): Eval;
}
/**
* @tsplus type ParSeq/Then
*/
export declare class Then implements Equals {
readonly left: ParSeq;
readonly right: ParSeq;
readonly _tag = "Then";
readonly [ParSeqSym]: ParSeqSym;
readonly [_A]: () => A;
constructor(left: ParSeq, right: ParSeq);
[Equals.sym](that: unknown): boolean;
[Hash.sym](): number;
equalsSafe(that: ParSeq): Eval;
private eq;
}
/**
* @tsplus type ParSeq/Both
*/
export declare class Both implements Equals {
readonly left: ParSeq;
readonly right: ParSeq;
readonly _tag = "Both";
readonly [ParSeqSym]: ParSeqSym;
readonly [_A]: () => A;
constructor(left: ParSeq, right: ParSeq);
[Equals.sym](that: unknown): boolean;
[Hash.sym](): number;
equalsSafe(that: ParSeq): Eval;
private eq;
}
/**
* Empty collection of events
* @tsplus static ParSeq.Ops empty
* @tsplus location "@tsplus/stdlib/collections/ParSeq/definition"
*/
export declare function empty(): ParSeq;
/**
* Constructs a new collection of events that contains the specified event.
* @tsplus static ParSeq.Ops single
* @tsplus location "@tsplus/stdlib/collections/ParSeq/definition"
*/
export declare function single(a: A): ParSeq;
/**
* Combines this collection of events with that collection of events to
* return a new collection of events that represents this collection of
* events in parallel with that collection of events.
* @tsplus static ParSeq.Ops combinePar
* @tsplus location "@tsplus/stdlib/collections/ParSeq/definition"
*/
export declare function combinePar_(left: ParSeq, right: ParSeq): ParSeq;
/**
* Combines this collection of events with that collection of events to
* return a new collection of events that represents this collection of
* events in parallel with that collection of events.
*
* @tsplus static ParSeq.Aspects combinePar
*/
export declare const combinePar: (right: ParSeq) => (left: ParSeq) => ParSeq;
/**
* Combines this collection of events with that collection of events to
* return a new collection of events that represents this collection of
* events followed by that collection of events.
* @tsplus static ParSeq.Ops combineSeq
* @tsplus location "@tsplus/stdlib/collections/ParSeq/definition"
*/
export declare function combineSeq_(left: ParSeq, right: ParSeq): ParSeq;
/**
* Combines this collection of events with that collection of events to
* return a new collection of events that represents this collection of
* events followed by that collection of events.
*
* @tsplus static ParSeq.Aspects combineSeq
*/
export declare const combineSeq: (right: ParSeq) => (left: ParSeq) => ParSeq;
/**
* @tsplus static ParSeq.Ops isParSeq
* @tsplus location "@tsplus/stdlib/collections/ParSeq/definition"
*/
export declare function isParSeq(u: unknown): u is ParSeq;
/**
* Checks if the ParSeq is empty.
* @tsplus getter ParSeq isEmpty
* @tsplus location "@tsplus/stdlib/collections/ParSeq/definition"
*/
export declare function isEmpty(self: ParSeq): boolean;
//# sourceMappingURL=definition.d.ts.map