Module Preface_specs.Apply

An Apply is a functor with lifting and sequencing capabilities. Apply is more general (and by extension weaker) than a Applicative. An Apply is also a Functor.

Laws

To have a predictable behaviour, the instance of Apply must obey some laws.

  1. apply = lift2 id
  2. lift2 f x y = f <$> x <*> y
  3. u *> v = (id <$ u) <*> v
  4. u <* v = lift2 const u v
  5. lift2 p (lift2 q u v) = lift2 f u % lift2 g v

Minimal definition

module type WITH_PRODUCT = sig ... end

Minimal interface using product.

module type WITH_APPLY = sig ... end

Minimal interface using apply.

module type WITH_LIFT2 = sig ... end

Minimal interface using lift2.

module type WITH_MAP_AND_PRODUCT = sig ... end

Minimal interface using map and product.

module type WITH_MAP_AND_APPLY = sig ... end

Minimal interface using map and product.

module type WITH_MAP_AND_LIFT2 = sig ... end

Minimal interface using map and lift2.

Structure anatomy

module type CORE = sig ... end

Basis operations.

module type OPERATION = sig ... end

Additional operations.

module type SYNTAX = sig ... end

Syntax extensions.

module type INFIX = sig ... end

Infix operators.

Complete API

module type API = sig ... end

The complete interface of an Apply.

Additional references