/**
*
* `Resume` is a possibly synchronous or asynchronous effect type. Conceptually you can think of
* `Resume` as a union between the `IO` and `Task` monads w/ cancelation. The `Disposable` interface is
* borrowed from `@most/core`'s internal types and makes it easy to interoperate. Using `Disposable`
* makes it easy to reuse the `@most/scheduler` package for providing scheduling consistent with any
* other most-based workflows you have.
*
* The beauty of `Resume` is that it can do work as fast as possible without delay. Sync when possible
* but async when needed allows you to unify your sync/async workflows using a single monad w/ easy
* interop with your existing IO/Task allowing for cancelation when required.
* @since 0.9.2
*/
import { Disposable } from '@most/types';
import { Alt1 } from 'fp-ts/Alt';
import { Applicative1 } from 'fp-ts/Applicative';
import { Apply1 } from 'fp-ts/Apply';
import * as Ch from 'fp-ts/Chain';
import { ChainRec1 } from 'fp-ts/ChainRec';
import * as E from 'fp-ts/Either';
import { FromIO1 } from 'fp-ts/FromIO';
import { FromTask1 } from 'fp-ts/FromTask';
import { Functor1 } from 'fp-ts/Functor';
import { IO } from 'fp-ts/IO';
import { Monad1 } from 'fp-ts/Monad';
import { Pointed1 } from 'fp-ts/Pointed';
import { Task } from 'fp-ts/Task';
import { Arity1 } from './function';
import { MonadRec1 } from './MonadRec';
/**
* @since 0.9.2
* @category Model
*/
export declare type Resume = Sync | Async;
/**
* @since 0.9.2
* @category Type-level
*/
export declare type ValueOf = [A] extends [Resume] ? R : never;
/**
* @since 0.9.2
* @category Model
*/
export interface Async {
readonly _tag: 'async';
readonly resume: AsyncResume;
}
/**
* @since 0.9.2
* @category Model
*/
export declare type AsyncResume = (resume: (value: A) => Disposable) => Disposable;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const async: (resume: AsyncResume) => Async;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromTask: (task: Task) => Async;
/**
* @since 0.9.2
* @category Model
*/
export interface Sync {
readonly _tag: 'sync';
readonly resume: IO;
}
/**
* @since 0.9.2
* @category Constructor
*/
export declare const sync: (resume: IO) => Sync;
/**
* @since 0.9.2
* @category Refinement
*/
export declare const isSync: (resume: Resume) => resume is Sync;
/**
* @since 0.9.2
* @category Refinement
*/
export declare const isAsync: (resume: Resume) => resume is Async;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const ap: (fa: Resume) => (fab: Resume>) => Resume;
/**
* @since 0.9.2
* @category Deconstructor
*/
export declare const run: (f: Arity1) => (resume: Resume) => Disposable;
/**
* @since 0.9.2
* @category Deconstructor
*/
export declare const start: (f: Arity1) => (resume: Resume) => Disposable;
/**
* @since 0.9.2
* @category Deconstructor
*/
export declare const exec: (resume: Resume) => Disposable;
/**
* @since 0.9.2
* @category Model
*/
export declare type DisposableTask = () => DisposablePromise;
/**
* @since 0.9.2
* @category Model
*/
export declare type DisposablePromise = Promise & Disposable;
/**
* @since 0.9.2
* @category Deconstructor
*/
export declare const toTask: (resume: Resume) => DisposableTask;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chain: (f: Arity1>) => (resume: Resume) => Resume;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const of: (a: A) => Sync;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainRec: (f: Arity1>>) => (value: A) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const race: (ra: Resume) => (rb: Resume) => Resume;
/**
* @since 0.9.2
* @category URI
*/
export declare const URI = "@typed/fp/Resume";
/**
* @since 0.9.2
* @category URI
*/
export declare type URI = typeof URI;
declare module 'fp-ts/HKT' {
interface URItoKind {
[URI]: Resume;
}
}
/**
* @since 0.9.2
* @category Instance
*/
export declare const Pointed: Pointed1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Functor: Functor1;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const map: (f: (a: A) => B) => (fa: Resume) => Resume;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Apply: Apply1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Applicative: Applicative1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Chain: Ch.Chain1;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirst: (f: (a: A) => Resume) => (first: Resume) => Resume;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Monad: Monad1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const ChainRec: ChainRec1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const MonadRec: MonadRec1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const Alt: Alt1;
/**
* @since 0.9.2
* @category Instance
*/
export declare const FromIO: FromIO1;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromIO: import("fp-ts/NaturalTransformation").NaturalTransformation11<"IO", "@typed/fp/Resume">;
/**
* @since 0.9.2
* @category Instance
*/
export declare const FromTask: FromTask1;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const Do: Resume<{}>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const bindTo: (name: N) => (fa: Resume) => Resume<{ [K in N]: A; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const bind: (name: Exclude, f: (a: A) => Resume) => (ma: Resume) => Resume<{ readonly [K in N | keyof A]: K extends keyof A ? A[K] : B; }>;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const tupled: (fa: Resume) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const traverseReadonlyArray: (f: (a: A) => Resume) => (ta: readonly A[]) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const traverseReadonlyArrayWithIndex: (f: (i: number, a: A) => Resume) => (ta: readonly A[]) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const zip: (ta: readonly Resume[]) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirstTaskK: (f: (a: A) => Task) => (first: Resume) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainTaskK: (f: (a: A) => Task) => (first: Resume) => Resume;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromTaskK: (f: (...a: A) => Task) => (...a: A) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainFirstIOK: (f: (a: A) => IO) => (first: Resume) => Resume;
/**
* @since 0.9.2
* @category Combinator
*/
export declare const chainIOK: (f: (a: A) => IO) => (first: Resume) => Resume;
/**
* @since 0.9.2
* @category Constructor
*/
export declare const fromIOK: (f: (...a: A) => IO) => (...a: A) => Resume;
/**
* @since 0.9.2
* @category Typeclass Constructor
*/
export declare const getMonoid: (M: import("fp-ts/Monoid").Monoid) => import("fp-ts/Monoid").Monoid>;
//# sourceMappingURL=Resume.d.ts.map