module type S = sig ... end

A profunctor has an input end with contravariant map, an output end with covariant map and an operation to join two terms with the same input type giving both outputs.

module type Record_builder = sig ... end

A module used to traverse each field of a record performing some action using a specific profunctor.

module type Of_applicative = sig ... end

A profunctor constructed from an applicative.

module type Conv_based = sig ... end

A profunctor-ish where both parameters must be mapped together at the same time. This is less expressive but appears in several libraries.

module type Of_conv_based = sig ... end

Embed a Conv_based profunctor-ish into a full profunctor, allowing the use of Record_builder directly.

module Record_builder (F : S) : Record_builder with type ('b, 'a) profunctor = ('b, 'a) F.t and type 'a profunctor_term = ('a, 'a) F.t
module Of_conv_based (F : Conv_based) : Of_conv_based with type 'a conv_based := 'a F.t
module Fn_with_id : sig ... end

A profunctor which represents a function where may sometimes be distinguished from other functions.