package middleware

  1. Overview
  2. Docs

Module Middleware.MakeSource

Creates a Middleware module, providing effects with the given Monad.

Parameters

module M : MONAD

Signature

Sourcemodule Diverter : sig ... end
Sourceval stop : 'output M.t -> (_, _, 'output) Diverter.t

stop x creates a Stop Diverter with the return value x.

Sourceval continue : 'next_input -> ('next_output -> 'output M.t) -> ('next_input, 'next_output, 'output) Diverter.t

continue next_input fn creates a Continue diverter, passing next_input to the subsequent Middleware g. fn is applied to the value returned by g.

Sourcetype ('input, 'next_input, 'next_output, 'output) t = 'input -> ('next_input, 'next_output, 'output) Diverter.t

A function which composes with other Middleware functions. Composed Middleware can respond to the return value of Middleware running later. When a Middleware function f runs, it either:

  • Stops, and returns a result
  • Continues by allowing the next middleware function g to run
  • After g runs, control returns to f, where f can respond to g's result and change its own return value.
Sourceval terminate : ('ai, 'bi, 'bo, 'ao) t -> ('bi -> 'bo M.t) -> 'ai -> 'ao M.t

terminate ma fb terminates Middleware ma by providing a function fb which does not delegate. In order to turn a Middleware chain into a function, it must be terminated by a non-delegating function using terminate.

Sourceval compose : ('ai, 'bi, 'bo, 'ao) t -> ('bi, 'ci, 'co, 'bo) t -> ('ai, 'ci, 'co, 'ao) t

compose ma mb composes two Middleware functions. When run, ma first runs, giving mb the option to continue later on. Note that a composed Middleware still need to be terminated via terminate to be called.

Sourcemodule Infix : sig ... end