Overview
Adapted from http://okmij.org/ftp/Computation/free-monad.html and https://github.com/purescript/purescript-free
Table of contents
- FoldFree2 (interface)
- FoldFree2C (interface)
- FoldFree3 (interface)
- FoldFree3C (interface)
- Free (type alias)
- URI (type alias)
- Impure (class)
- Pure (class)
- URI (constant)
- foldFree (function)
- hoistFree (function)
- liftF (function)
- of (function)
FoldFree2 (interface)
Signature
export interface FoldFree2<M extends URIS2> {
<F extends URIS2, L, A>(nt: <X>(fa: Type2<F, L, X>) => Type2<M, L, X>, fa: Free<F, A>): Type2<M, L, A>
<F extends URIS, L, A>(nt: <X>(fa: Type<F, X>) => Type2<M, L, X>, fa: Free<F, A>): Type2<M, L, A>
}
FoldFree2C (interface)
Signature
export interface FoldFree2C<M extends URIS2, L> {
<F extends URIS2, A>(nt: <X>(fa: Type2<F, L, X>) => Type2<M, L, X>, fa: Free<F, A>): Type2<M, L, A>
<F extends URIS, A>(nt: <X>(fa: Type<F, X>) => Type2<M, L, X>, fa: Free<F, A>): Type2<M, L, A>
}
FoldFree3 (interface)
Signature
export interface FoldFree3<M extends URIS3> {
<F extends URIS3, U, L, A>(nt: <X>(fa: Type3<F, U, L, X>) => Type3<M, U, L, X>, fa: Free<F, A>): Type3<M, U, L, A>
<F extends URIS2, U, L, A>(nt: <X>(fa: Type2<F, L, X>) => Type3<M, U, L, X>, fa: Free<F, A>): Type3<M, U, L, A>
<F extends URIS, U, L, A>(nt: <X>(fa: Type<F, X>) => Type3<M, U, L, X>, fa: Free<F, A>): Type3<M, U, L, A>
}
FoldFree3C (interface)
Signature
export interface FoldFree3C<M extends URIS3, U, L> {
<F extends URIS3, A>(nt: <X>(fa: Type3<F, U, L, X>) => Type3<M, U, L, X>, fa: Free<F, A>): Type3<M, U, L, A>
<F extends URIS2, A>(nt: <X>(fa: Type2<F, L, X>) => Type3<M, U, L, X>, fa: Free<F, A>): Type3<M, U, L, A>
<F extends URIS, A>(nt: <X>(fa: Type<F, X>) => Type3<M, U, L, X>, fa: Free<F, A>): Type3<M, U, L, A>
}
Free (type alias)
Signature
export type Free<F, A> = Pure<F, A> | Impure<F, A, any>
Added in v1.0.0
URI (type alias)
Signature
export type URI = typeof URI
Impure (class)
Signature
export class Impure<F, A, X> {
constructor(readonly fx: HKT<F, X>, readonly f: (x: X) => Free<F, A>) { ... }
...
}
map (method)
Signature
map<B>(f: (a: A) => B): Free<F, B> { ... }
ap (method)
Signature
ap<B>(fab: Free<F, (a: A) => B>): Free<F, B> { ... }
ap_ (method)
Signature
ap_<B, C>(this: Free<F, (b: B) => C>, fb: Free<F, B>): Free<F, C> { ... }
chain (method)
Signature
chain<B>(f: (a: A) => Free<F, B>): Free<F, B> { ... }
inspect (method)
Signature
inspect(): string { ... }
toString (method)
Signature
toString(): string { ... }
isPure (method)
Signature
isPure(): this is Pure<F, A> { ... }
isImpure (method)
Signature
isImpure(): this is Impure<F, A, X> { ... }
Pure (class)
Signature
export class Pure<F, A> {
constructor(readonly value: A) { ... }
...
}
map (method)
Signature
map<B>(f: (a: A) => B): Free<F, B> { ... }
ap (method)
Signature
ap<B>(fab: Free<F, (a: A) => B>): Free<F, B> { ... }
ap_ (method)
Flipped version of ap
Signature
ap_<B, C>(this: Free<F, (b: B) => C>, fb: Free<F, B>): Free<F, C> { ... }
chain (method)
Signature
chain<B>(f: (a: A) => Free<F, B>): Free<F, B> { ... }
inspect (method)
Signature
inspect(): string { ... }
toString (method)
Signature
toString(): string { ... }
isPure (method)
Signature
isPure(): this is Pure<F, A> { ... }
isImpure (method)
Signature
isImpure(): this is Impure<F, A, any> { ... }
URI (constant)
Signature
export const URI = ...
foldFree (function)
Signature
export function foldFree<M extends URIS3>(M: Monad3<M>): FoldFree3<M>
export function foldFree<M extends URIS3, U, L>(M: Monad3C<M, U, L>): FoldFree3C<M, U, L>
export function foldFree<M extends URIS2>(M: Monad2<M>): FoldFree2<M>
export function foldFree<M extends URIS2, L>(M: Monad2C<M, L>): FoldFree2C<M, L>
export function foldFree<M extends URIS>(
M: Monad1<M>
): <F extends URIS, A>(nt: <X>(fa: Type<F, X>) => Type<M, X>, fa: Free<F, A>) => Type<M, A>
export function foldFree<M>(M: Monad<M>): <F, A>(nt: <X>(fa: HKT<F, X>) => HKT<M, X>, fa: Free<F, A>) => HKT<M, A> { ... }
Added in v1.0.0
hoistFree (function)
Use a natural transformation to change the generating type constructor of a free monad
Signature
export function hoistFree<F extends URIS3 = never, G extends URIS3 = never>(
nt: <U, L, A>(fa: Type3<F, U, L, A>) => Type3<G, U, L, A>
): (<A>(fa: Free<F, A>) => Free<G, A>)
export function hoistFree<F extends URIS2 = never, G extends URIS2 = never>(
nt: <L, A>(fa: Type2<F, L, A>) => Type2<G, L, A>
): (<A>(fa: Free<F, A>) => Free<G, A>)
export function hoistFree<F extends URIS = never, G extends URIS = never>(
nt: <A>(fa: Type<F, A>) => Type<G, A>
): (<A>(fa: Free<F, A>) => Free<G, A>)
export function hoistFree<F, G>(nt: <A>(fa: HKT<F, A>) => HKT<G, A>): (<A>(fa: Free<F, A>) => Free<G, A>) { ... }
Added in v1.0.0
liftF (function)
Lift an impure value described by the generating type constructor F
into the free monad
Signature
export const liftF = <F, A>(fa: HKT<F, A>): Free<F, A> => ...
Added in v1.0.0
of (function)
Signature
export const of = <F, A>(a: A): Free<F, A> => ...
Added in v1.0.0