Overview

The Monad type class combines the operations of the Chain and Applicative type classes. Therefore, Monad instances represent type constructors which support sequential composition, and also lifting of functions of arbitrary arity.

Instances must satisfy the following laws in addition to the Applicative and Chain laws:

  1. Left identity: M.chain(M.of(a), f) = f(a)
  2. Right identity: M.chain(fa, M.of) = fa

Note. Functor’s map can be derived: A.map = (fa, f) => A.chain(fa, a => A.of(f(a)))


Table of contents


Monad (interface)

Signature

export interface Monad<F> extends Applicative<F>, Chain<F> {}

Added in v1.0.0

Monad1 (interface)

Signature

export interface Monad1<F extends URIS> extends Applicative1<F>, Chain1<F> {}

Monad2 (interface)

Signature

export interface Monad2<M extends URIS2> extends Applicative2<M>, Chain2<M> {}

Monad2C (interface)

Signature

export interface Monad2C<M extends URIS2, L> extends Applicative2C<M, L>, Chain2C<M, L> {}

Monad3 (interface)

Signature

export interface Monad3<M extends URIS3> extends Applicative3<M>, Chain3<M> {}

Monad3C (interface)

Signature

export interface Monad3C<M extends URIS3, U, L> extends Applicative3C<M, U, L>, Chain3C<M, U, L> {}