import * as types from '@most/types';
import * as Alt_ from 'fp-ts/Alt';
import { Alternative1 } from 'fp-ts/Alternative';
import * as App from 'fp-ts/Applicative';
import * as Ap from 'fp-ts/Apply';
import * as CH from 'fp-ts/Chain';
import { ChainRec1 } from 'fp-ts/ChainRec';
import { Compactable1 } from 'fp-ts/Compactable';
import { Either } from 'fp-ts/Either';
import { Eq } from 'fp-ts/Eq';
import { Filterable1 } from 'fp-ts/Filterable';
import { FromIO1 } from 'fp-ts/FromIO';
import { FromTask1 } from 'fp-ts/FromTask';
import { Functor1 } from 'fp-ts/Functor';
import { Monad1 } from 'fp-ts/Monad';
import { Monoid } from 'fp-ts/Monoid';
import * as O from 'fp-ts/Option';
import { Pointed1 } from 'fp-ts/Pointed';
import { Predicate } from 'fp-ts/Predicate';
import { Separated } from 'fp-ts/Separated';
import * as FRe from './FromResume';
import { Arity1 } from './function';
import * as R from './Resume';
/**
 * @since 0.9.2
 * @category Model
 */
export declare type Stream<A> = types.Stream<A>;
/**
 * @since 0.9.2
 * @category Type-level
 */
export declare type ValueOf<A> = [A] extends [Stream<infer R>] ? R : never;
/**
 * Convert an IO<Disposable> into a Most.js Task
 * @since 0.9.2
 * @category Constructor
 */
export declare function createCallbackTask(cb: Arity1<types.Time, types.Disposable>, onError?: (error: Error) => void): types.Task;
/**
 * @since 0.9.2
 * @category URI
 */
export declare const URI: "@most/core/Stream";
/**
 * @since 0.9.2
 * @category URI
 */
export declare type URI = typeof URI;
declare module 'fp-ts/HKT' {
    interface URItoKind<A> {
        [URI]: types.Stream<A>;
    }
}
/**
 * Create a Stream monoid where concat is a parallel merge.
 */
/**
 * @since 0.9.2
 * @category Typeclass Constructor
 */
export declare const getMonoid: <A>() => Monoid<types.Stream<A>>;
/**
 * Filter Option's from within a Stream
 */
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const compact: <A>(stream: types.Stream<O.Option<A>>) => types.Stream<A>;
/**
 * Separate left and right values
 */
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const separate: <A, B>(stream: types.Stream<Either<A, B>>) => Separated<types.Stream<A>, types.Stream<B>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const partitionMap: <A, B, C>(f: (a: A) => Either<B, C>) => (fa: types.Stream<A>) => Separated<types.Stream<B>, types.Stream<C>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const partition: <A>(predicate: Predicate<A>) => (fa: types.Stream<A>) => Separated<types.Stream<A>, types.Stream<A>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const filterMap: <A, B>(f: (a: A) => O.Option<B>) => (fa: types.Stream<A>) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Functor: Functor1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Pointed: Pointed1<URI>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const of: <A>(a: A) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Apply: Ap.Apply1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const apFirst: <B>(second: types.Stream<B>) => <A>(first: types.Stream<A>) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const apS: <N extends string, A, B>(name: Exclude<N, keyof A>, fb: types.Stream<B>) => (fa: types.Stream<A>) => types.Stream<{ readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const apSecond: <B>(second: types.Stream<B>) => <A>(first: types.Stream<A>) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const apT: <B>(fb: types.Stream<B>) => <A extends readonly unknown[]>(fas: types.Stream<A>) => types.Stream<readonly [...A, B]>;
/**
 * @since 0.9.2
 * @category Typeclass Constructor
 */
export declare const getApplySemigroup: <A>(S: import("fp-ts/Semigroup").Semigroup<A>) => import("fp-ts/Semigroup").Semigroup<types.Stream<A>>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Applicative: App.Applicative1<URI>;
/**
 * @since 0.9.2
 * @category  Typeclass Constructor
 */
export declare const getApplicativeMonoid: <A>(M: Monoid<A>) => Monoid<types.Stream<A>>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Chain: CH.Chain1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainFirst: <A, B>(f: (a: A) => types.Stream<B>) => (first: types.Stream<A>) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const bind: <N extends string, A, B>(name: Exclude<N, keyof A>, f: (a: A) => types.Stream<B>) => (ma: types.Stream<A>) => types.Stream<{ readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Monad: Monad1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainRec: <A, B>(f: (value: A) => types.Stream<Either<A, B>>) => (value: A) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const ChainRec: ChainRec1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const switchRec: <A, B>(f: (value: A) => types.Stream<Either<A, B>>) => (value: A) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const SwitchRec: ChainRec1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const mergeConcurrentlyRec: (concurrency: number) => <A, B>(f: (value: A) => types.Stream<Either<A, B>>) => (value: A) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Typeclass Constructor
 */
export declare const getConcurrentChainRec: (concurrency: number) => ChainRec1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const FromIO: FromIO1<URI>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromIO: import("fp-ts/NaturalTransformation").NaturalTransformation11<"IO", "@most/core/Stream">;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const FromTask: FromTask1<URI>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromTask: import("fp-ts/NaturalTransformation").NaturalTransformation11<"Task", "@most/core/Stream">;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const FromResume: FRe.FromResume1<URI>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromResume: import("fp-ts/NaturalTransformation").NaturalTransformation11<"@typed/fp/Resume", "@most/core/Stream">;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainFirstResumeK: <A, B>(f: (value: A) => R.Resume<B>) => (hkt: types.Stream<A>) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainResumeK: <A, B>(f: (value: A) => R.Resume<B>) => (hkt: types.Stream<A>) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromResumeK: <A extends readonly any[], B>(f: (...args: A) => R.Resume<B>) => (...args: A) => types.Stream<B>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Alt: Alt_.Alt1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const race: <A>(second: import("fp-ts/function").Lazy<types.Stream<A>>) => (first: types.Stream<A>) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Alternative: Alternative1<URI>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const zero: <A>() => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Compactable: Compactable1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Filterable: Filterable1<URI>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const Do: types.Stream<{}>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const bindTo: <N extends string>(name: N) => <A>(fa: types.Stream<A>) => types.Stream<{ [K in N]: A; }>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const tupled: <A>(fa: types.Stream<A>) => types.Stream<readonly [A]>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const createSink: <A>(sink?: Partial<types.Sink<A>>) => types.Sink<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const collectEvents: (scheduler: types.Scheduler) => <A>(stream: types.Stream<A>) => Promise<readonly A[]>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const onDispose: (disposable: types.Disposable) => <A>(stream: types.Stream<A>) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const combineAll: <A extends readonly types.Stream<any>[]>(...streams: A) => types.Stream<{ readonly [K in keyof A]: ValueOf<A[K]>; }>;
/**
 * @since 0.11.0
 * @category Combinator
 */
export declare const combineStruct: <A>(streams: { readonly [K in keyof A]: types.Stream<A[K]>; }) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const exhaustLatest: <A>(stream: types.Stream<types.Stream<A>>) => types.Stream<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const exhaustMapLatest: <A, B>(f: (value: A) => types.Stream<B>) => (stream: types.Stream<A>) => types.Stream<B>;
/**
 * Using the provided Eq mergeMapWhen conditionally applies a Kliesli arrow
 * to the values within an Array when they are added and any values removed
 * from the array will be disposed of immediately
 * @since 0.9.2
 * @category Combinator
 */
export declare const mergeMapWhen: <V>(Eq?: Eq<V>) => <A>(f: (value: V) => types.Stream<A>) => (values: Stream<readonly V[]>) => Stream<readonly A[]>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const keyed: <A>(Eq: Eq<A>) => (stream: Stream<readonly A[]>) => Stream<readonly Stream<A>[]>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const switchFirst: <A>(second: Stream<A>) => <B>(first: Stream<B>) => Stream<B>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare function mergeFirst<A>(a: Stream<A>): <B>(b: Stream<B>) => Stream<B>;
export * from '@most/core';
export * from '@most/types';
//# sourceMappingURL=Stream.d.ts.map