Module Preface_make

Set of functors (in ML sense) whose role is to achieve the abstractions described in Preface_specs. Each abstraction described in the specifications has its image in Preface.Make and the functors take as arguments modules constrained by the signatures described in Preface_specs and produce modules whose complete interface is also described in Preface_specs.)

For a detailed description of the module breakdown logic, go to the homepage.

Multiple path

The achievement of an abstraction usually offers several paths:

Monoid hierarchy

module Semigroup : sig ... end
module Monoid : sig ... end

Lattice hierarchy

module Meet_semilattice : sig ... end
module Join_semilattice : sig ... end
module Bounded_meet_semilattice : sig ... end
module Bounded_join_semilattice : sig ... end
module Bounded_lattice : sig ... end

Building a Preface_specs.Bounded_lettice

module Lattice : sig ... end

Building a Preface_specs.Lettice

Indexed Functor hierarchy

module Indexed_functor : sig ... end
module Indexed_alt : sig ... end
module Indexed_apply : sig ... end

Building a Preface_specs.INDEXED_APPLY

module Indexed_applicative : sig ... end
module Indexed_alternative : sig ... end
module Indexed_selective : sig ... end
module Indexed_bind : sig ... end
module Indexed_monad : sig ... end
module Indexed_monad_plus : sig ... end
module Indexed_comonad : sig ... end
module Indexed_foldable : sig ... end

Building an Preface_specs.INDEXED_FOLDABLE

Functor hierarchy

module Invariant : sig ... end
module Functor : sig ... end
module Alt : sig ... end
module Apply : sig ... end

Building a Preface_specs.APPLY

module Applicative : sig ... end
module Alternative : sig ... end
module Selective : sig ... end
module Bind : sig ... end
module Monad : sig ... end
module Monad_plus : sig ... end
module Comonad : sig ... end
module Foldable : sig ... end
module Traversable : sig ... end

Contravariant hierarchy

module Contravariant : sig ... end
module Divisible : sig ... end
module Decidable : sig ... end

Bifunctor hierarchy

module Bifunctor : sig ... end

Profunctor hierarchy

module Profunctor : sig ... end
module Strong : sig ... end
module Choice : sig ... end
module Closed : sig ... end

Arrow hierarchy

module Semigroupoid : sig ... end
module Category : sig ... end
module Arrow : sig ... end
module Arrow_zero : sig ... end
module Arrow_alt : sig ... end
module Arrow_plus : sig ... end
module Arrow_choice : sig ... end
module Arrow_apply : sig ... end

Transformers

Monad Transformers

module Reader : sig ... end

Building a Preface_specs.Reader, a Reader transformer.

module Writer : sig ... end

Building a Preface_specs.Writer, a Writer transformer.

module State : sig ... end

Building a Preface_specs.State, a State transformer.

Comonad Transformers

module Store : sig ... end

Building a Preface_specs.Store, a Store transformer.

module Env : sig ... end

Building a Preface_specs.Env, an Env transformer.

module Traced : sig ... end

Building a Preface_specs.Traced, a Traced transformer.

Free constructions

module Free_applicative : sig ... end
module Free_selective : sig ... end
module Freer_selective : sig ... end
module Free_monad : sig ... end
module Freer_monad : sig ... end

Conversion and Expansion

Produces abstractions based on other abstractions (e.g. bifunctors from functors). Mainly for dealing with different arities.

module Join : sig ... end

Join produces a Functor from a Bifunctor using both arguments of a Bifunctor.

module Clown : sig ... end

Clown can produces Bifunctor or Profunctor using a Functor (or a Contravariant) on the first argument of the Bi/Profunctor as described in Clowns to the Left, Jokers to the Right (Functional Pearl)

module Joker : sig ... end

Joker can produces Bifunctor or Profunctor using a Functor on the second argument of the Bi/Profunctor as described in Clowns to the Left, Jokers to the Right (Functional Pearl)

module Kleisli : sig ... end

Kleisli uses the Kleisli category to describe arity 2 constructions for arity 1 constructions, usually using the form: type ('a, 'b) t = 'a -> F.t.

module Cokleisli : sig ... end

Cokleisli uses the Cokleisli category to describe arity 2 constructions for arity 1 constructions, usually using the form: type ('a, 'b) t = 'a F.t -> 'b.