package preface
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:
- using the minimal definition or implement as few combiners as possible. Some abstractions offer several minimal definitions, so it is up to you to choose the path that seems most relevant .
- A construction on top of another abstraction (ie:
Preface_specs.MONOIDdefined over aPreface_specs.SEMIGROUP) - A manual approach where each feature has to be provided (while offering intermediate functors to avoid boring tasks such as defining infix operators).
- A simplification of an existing abstraction, such as turning a
Preface_specs.ALTERNATIVEinto aPreface_specs.MONOIDby fixing the type of the Alternative. - Using a fixed algebra. For example, the sum, product or composition of
Preface_specs.FUNCTOR.
Monoid hierarchy
module Semigroup : sig ... endBuilding a Preface_specs.Semigroup
module Monoid : sig ... endBuilding a Preface_specs.Monoid
Lattice hierarchy
module Meet_semilattice : sig ... endBuilding a Preface_specs.Meet_semilattice
module Join_semilattice : sig ... endBuilding a Preface_specs.Join_semilattice
module Bounded_meet_semilattice : sig ... endBuilding a Preface_specs.Bounded_meet_semilattice
module Bounded_join_semilattice : sig ... endBuilding a Preface_specs.Bounded_join_semilattice
module Bounded_lattice : sig ... endBuilding a Preface_specs.Bounded_lettice
module Lattice : sig ... endBuilding a Preface_specs.Lettice
Indexed Functor hierarchy
module Indexed_functor : sig ... endBuilding a Preface_specs.Indexed_functor
module Indexed_alt : sig ... endBuilding a Preface_specs.Indexed_alt
module Indexed_apply : sig ... endBuilding a Preface_specs.INDEXED_APPLY
module Indexed_applicative : sig ... endBuilding a Preface_specs.Indexed_applicative
module Indexed_alternative : sig ... endBuilding a Preface_specs.Indexed_alternative
module Indexed_selective : sig ... endBuilding a Preface_specs.Indexed_selective
module Indexed_bind : sig ... endBuilding a Preface_specs.Indexed_bind
module Indexed_monad : sig ... endBuilding a Preface_specs.Indexed_monad
module Indexed_monad_plus : sig ... endBuilding a Preface_specs.Indexed_monad_plus
module Indexed_comonad : sig ... endBuilding an Preface_specs.Indexed_comonad
module Indexed_foldable : sig ... endBuilding an Preface_specs.INDEXED_FOLDABLE
Functor hierarchy
module Invariant : sig ... endBuilding a Preface_specs.Invariant
module Functor : sig ... endBuilding a Preface_specs.Functor
module Alt : sig ... endBuilding a Preface_specs.Alt
module Apply : sig ... endBuilding a Preface_specs.APPLY
module Applicative : sig ... endBuilding a Preface_specs.Applicative
module Alternative : sig ... endBuilding a Preface_specs.Alternative
module Selective : sig ... endBuilding a Preface_specs.Selective
module Bind : sig ... endBuilding a Preface_specs.Bind
module Monad : sig ... endBuilding a Preface_specs.Monad
module Monad_plus : sig ... endBuilding a Preface_specs.Monad_plus
module Comonad : sig ... endBuilding a Preface_specs.Comonad
module Foldable : sig ... endBuilding a Preface_specs.Foldable
module Traversable : sig ... endBuilding a Preface_specs.Traversable
Contravariant hierarchy
module Contravariant : sig ... endBuilding a Preface_specs.Contravariant
module Divisible : sig ... endBuilding a Preface_specs.Divisible
module Decidable : sig ... endBuilding a Preface_specs.Decidable
Bifunctor hierarchy
module Bifunctor : sig ... endBuilding a Preface_specs.Bifunctor
Profunctor hierarchy
module Profunctor : sig ... endBuilding a Preface_specs.Profunctor
module Strong : sig ... endBuilding a Preface_specs.Strong
module Choice : sig ... endBuilding a Preface_specs.Choice
module Closed : sig ... endBuilding a Preface_specs.Closed
Arrow hierarchy
module Semigroupoid : sig ... endBuilding a Preface_specs.Semigroupoid
module Category : sig ... endBuilding a Preface_specs.Category
module Arrow : sig ... endBuilding a Preface_specs.Arrow
module Arrow_zero : sig ... endBuilding a Preface_specs.Arrow_zero
module Arrow_alt : sig ... endBuilding a Preface_specs.Arrow_alt
module Arrow_plus : sig ... endBuilding a Preface_specs.Arrow_plus
module Arrow_choice : sig ... endBuilding a Preface_specs.Arrow_choice
module Arrow_apply : sig ... endBuilding a Preface_specs.Arrow_apply
Transformers
Monad Transformers
module Reader : sig ... endBuilding a Preface_specs.Reader, a Reader transformer.
module Writer : sig ... endBuilding a Preface_specs.Writer, a Writer transformer.
module State : sig ... endBuilding a Preface_specs.State, a State transformer.
Comonad Transformers
module Store : sig ... endBuilding a Preface_specs.Store, a Store transformer.
module Env : sig ... endBuilding a Preface_specs.Env, an Env transformer.
module Traced : sig ... endBuilding a Preface_specs.Traced, a Traced transformer.
Free constructions
module Free_applicative : sig ... endBuilding a Preface_specs.Free_applicative
module Free_selective : sig ... endBuilding a Preface_specs.Free_selective
module Freer_selective : sig ... endBuilding a Preface_specs.Freer_selective
module Free_monad : sig ... endBuilding a Preface_specs.Free_monad
module Freer_monad : sig ... endBuilding a Preface_specs.Freer_monad
Conversion and Expansion
Produces abstractions based on other abstractions (e.g. bifunctors from functors). Mainly for dealing with different arities.
module Join : sig ... endJoin produces a Functor from a Bifunctor using both arguments of a Bifunctor.
module Clown : sig ... endClown 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 ... endJoker 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 ... endKleisli 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 ... endCokleisli 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.