@typed/fp
Version:
Data Structures and Resources for fp-ts
632 lines (410 loc) • 9.52 kB
Markdown
title: Resume.ts
nav_order: 58
parent: Modules
## Resume overview
`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.
Added in v0.9.2
<h2 class="text-delta">Table of contents</h2>
- [Combinator](#combinator)
- [ap](#ap)
- [bind](#bind)
- [bindTo](#bindto)
- [chain](#chain)
- [chainFirst](#chainfirst)
- [chainFirstIOK](#chainfirstiok)
- [chainFirstTaskK](#chainfirsttaskk)
- [chainIOK](#chainiok)
- [chainRec](#chainrec)
- [chainTaskK](#chaintaskk)
- [map](#map)
- [race](#race)
- [traverseReadonlyArray](#traversereadonlyarray)
- [traverseReadonlyArrayWithIndex](#traversereadonlyarraywithindex)
- [tupled](#tupled)
- [zip](#zip)
- [Constructor](#constructor)
- [Do](#do)
- [async](#async)
- [fromIO](#fromio)
- [fromIOK](#fromiok)
- [fromTask](#fromtask)
- [fromTaskK](#fromtaskk)
- [of](#of)
- [sync](#sync)
- [Deconstructor](#deconstructor)
- [exec](#exec)
- [run](#run)
- [start](#start)
- [toTask](#totask)
- [Instance](#instance)
- [Alt](#alt)
- [Applicative](#applicative)
- [Apply](#apply)
- [Chain](#chain)
- [ChainRec](#chainrec)
- [FromIO](#fromio)
- [FromTask](#fromtask)
- [Functor](#functor)
- [Monad](#monad)
- [MonadRec](#monadrec)
- [Pointed](#pointed)
- [Model](#model)
- [Async (interface)](#async-interface)
- [AsyncResume (type alias)](#asyncresume-type-alias)
- [DisposablePromise (type alias)](#disposablepromise-type-alias)
- [DisposableTask (type alias)](#disposabletask-type-alias)
- [Resume (type alias)](#resume-type-alias)
- [Sync (interface)](#sync-interface)
- [Refinement](#refinement)
- [isAsync](#isasync)
- [isSync](#issync)
- [Type-level](#type-level)
- [ValueOf (type alias)](#valueof-type-alias)
- [Typeclass Constructor](#typeclass-constructor)
- [getMonoid](#getmonoid)
- [URI](#uri)
- [URI](#uri-1)
- [URI (type alias)](#uri-type-alias)
# Combinator
## ap
**Signature**
```ts
export declare const ap: <A>(fa: Resume<A>) => <B>(fab: Resume<Arity1<A, B>>) => Resume<B>
```
Added in v0.9.2
## bind
**Signature**
```ts
export declare const bind: <N, A, B>(
name: Exclude<N, keyof A>,
f: (a: A) => Resume<B>,
) => (ma: Resume<A>) => Resume<{ readonly [K in N | keyof A]: K extends keyof A ? A[K] : B }>
```
Added in v0.9.2
## bindTo
**Signature**
```ts
export declare const bindTo: <N>(name: N) => <A>(fa: Resume<A>) => Resume<{ [K in N]: A }>
```
Added in v0.9.2
## chain
**Signature**
```ts
export declare const chain: <A, B>(f: Arity1<A, Resume<B>>) => (resume: Resume<A>) => Resume<B>
```
Added in v0.9.2
## chainFirst
**Signature**
```ts
export declare const chainFirst: <A, B>(f: (a: A) => Resume<B>) => (first: Resume<A>) => Resume<A>
```
Added in v0.9.2
## chainFirstIOK
**Signature**
```ts
export declare const chainFirstIOK: <A, B>(f: (a: A) => IO<B>) => (first: Resume<A>) => Resume<A>
```
Added in v0.9.2
## chainFirstTaskK
**Signature**
```ts
export declare const chainFirstTaskK: <A, B>(
f: (a: A) => Task<B>,
) => (first: Resume<A>) => Resume<A>
```
Added in v0.9.2
## chainIOK
**Signature**
```ts
export declare const chainIOK: <A, B>(f: (a: A) => IO<B>) => (first: Resume<A>) => Resume<B>
```
Added in v0.9.2
## chainRec
**Signature**
```ts
export declare const chainRec: <A, B>(
f: Arity1<A, Resume<E.Either<A, B>>>,
) => (value: A) => Resume<B>
```
Added in v0.9.2
## chainTaskK
**Signature**
```ts
export declare const chainTaskK: <A, B>(f: (a: A) => Task<B>) => (first: Resume<A>) => Resume<B>
```
Added in v0.9.2
## map
**Signature**
```ts
export declare const map: <A, B>(f: (a: A) => B) => (fa: Resume<A>) => Resume<B>
```
Added in v0.9.2
## race
**Signature**
```ts
export declare const race: <A>(ra: Resume<A>) => <B>(rb: Resume<B>) => Resume<A | B>
```
Added in v0.9.2
## traverseReadonlyArray
**Signature**
```ts
export declare const traverseReadonlyArray: <A, B>(
f: (a: A) => Resume<B>,
) => (ta: readonly A[]) => Resume<readonly B[]>
```
Added in v0.9.2
## traverseReadonlyArrayWithIndex
**Signature**
```ts
export declare const traverseReadonlyArrayWithIndex: <A, B>(
f: (i: number, a: A) => Resume<B>,
) => (ta: readonly A[]) => Resume<readonly B[]>
```
Added in v0.9.2
## tupled
**Signature**
```ts
export declare const tupled: <A>(fa: Resume<A>) => Resume<readonly [A]>
```
Added in v0.9.2
## zip
**Signature**
```ts
export declare const zip: <A>(ta: readonly Resume<A>[]) => Resume<readonly A[]>
```
Added in v0.9.2
# Constructor
## Do
**Signature**
```ts
export declare const Do: Resume<{}>
```
Added in v0.9.2
## async
**Signature**
```ts
export declare const async: <A>(resume: AsyncResume<A>) => Async<A>
```
Added in v0.9.2
## fromIO
**Signature**
```ts
export declare const fromIO: NaturalTransformation11<'IO', '@typed/fp/Resume'>
```
Added in v0.9.2
## fromIOK
**Signature**
```ts
export declare const fromIOK: <A, B>(f: (...a: A) => IO<B>) => (...a: A) => Resume<B>
```
Added in v0.9.2
## fromTask
**Signature**
```ts
export declare const fromTask: <A>(task: Task<A>) => Async<A>
```
Added in v0.9.2
## fromTaskK
**Signature**
```ts
export declare const fromTaskK: <A, B>(f: (...a: A) => Task<B>) => (...a: A) => Resume<B>
```
Added in v0.9.2
## of
**Signature**
```ts
export declare const of: <A>(a: A) => Sync<A>
```
Added in v0.9.2
## sync
**Signature**
```ts
export declare const sync: <A>(resume: IO<A>) => Sync<A>
```
Added in v0.9.2
# Deconstructor
## exec
**Signature**
```ts
export declare const exec: (resume: Resume<any>) => Disposable
```
Added in v0.9.2
## run
**Signature**
```ts
export declare const run: <A>(f: Arity1<A, Disposable>) => (resume: Resume<A>) => Disposable
```
Added in v0.9.2
## start
**Signature**
```ts
export declare const start: <A>(f: Arity1<A, any>) => (resume: Resume<A>) => Disposable
```
Added in v0.9.2
## toTask
**Signature**
```ts
export declare const toTask: <A>(resume: Resume<A>) => DisposableTask<A>
```
Added in v0.9.2
# Instance
## Alt
**Signature**
```ts
export declare const Alt: Alt1<'@typed/fp/Resume'>
```
Added in v0.9.2
## Applicative
**Signature**
```ts
export declare const Applicative: Applicative1<'@typed/fp/Resume'>
```
Added in v0.9.2
## Apply
**Signature**
```ts
export declare const Apply: Apply1<'@typed/fp/Resume'>
```
Added in v0.9.2
## Chain
**Signature**
```ts
export declare const Chain: Ch.Chain1<'@typed/fp/Resume'>
```
Added in v0.9.2
## ChainRec
**Signature**
```ts
export declare const ChainRec: ChainRec1<'@typed/fp/Resume'>
```
Added in v0.9.2
## FromIO
**Signature**
```ts
export declare const FromIO: FIO.FromIO1<'@typed/fp/Resume'>
```
Added in v0.9.2
## FromTask
**Signature**
```ts
export declare const FromTask: FT.FromTask1<'@typed/fp/Resume'>
```
Added in v0.9.2
## Functor
**Signature**
```ts
export declare const Functor: Functor1<'@typed/fp/Resume'>
```
Added in v0.9.2
## Monad
**Signature**
```ts
export declare const Monad: Monad1<'@typed/fp/Resume'>
```
Added in v0.9.2
## MonadRec
**Signature**
```ts
export declare const MonadRec: MonadRec1<'@typed/fp/Resume'>
```
Added in v0.9.2
## Pointed
**Signature**
```ts
export declare const Pointed: Pointed1<'@typed/fp/Resume'>
```
Added in v0.9.2
# Model
## Async (interface)
**Signature**
```ts
export interface Async<A> {
readonly _tag: 'async'
readonly resume: AsyncResume<A>
}
```
Added in v0.9.2
## AsyncResume (type alias)
**Signature**
```ts
export type AsyncResume<A> = (resume: (value: A) => Disposable) => Disposable
```
Added in v0.9.2
## DisposablePromise (type alias)
**Signature**
```ts
export type DisposablePromise<A> = Promise<A> & Disposable
```
Added in v0.9.2
## DisposableTask (type alias)
**Signature**
```ts
export type DisposableTask<A> = () => DisposablePromise<A>
```
Added in v0.9.2
## Resume (type alias)
**Signature**
```ts
export type Resume<A> = Sync<A> | Async<A>
```
Added in v0.9.2
## Sync (interface)
**Signature**
```ts
export interface Sync<A> {
readonly _tag: 'sync'
readonly resume: IO<A>
}
```
Added in v0.9.2
# Refinement
## isAsync
**Signature**
```ts
export declare const isAsync: <A>(resume: Resume<A>) => resume is Async<A>
```
Added in v0.9.2
## isSync
**Signature**
```ts
export declare const isSync: <A>(resume: Resume<A>) => resume is Sync<A>
```
Added in v0.9.2
# Type-level
## ValueOf (type alias)
**Signature**
```ts
export type ValueOf<A> = [A] extends [Resume<infer R>] ? R : never
```
Added in v0.9.2
# Typeclass Constructor
## getMonoid
**Signature**
```ts
export declare const getMonoid: <A>(M: Monoid<A>) => Monoid<Resume<A>>
```
Added in v0.9.2
# URI
## URI
**Signature**
```ts
export declare const URI: '@typed/fp/Resume'
```
Added in v0.9.2
## URI (type alias)
**Signature**
```ts
export type URI = typeof URI
```
Added in v0.9.2