package preface
Module Preface_make.Arrow
Building a Preface_specs.Arrow
Using the minimal definition
Using arrow and fst over a Category
Build an Preface_specs.ARROW using Preface_specs.Arrow.WITH_ARROW_AND_FST over a Preface_specs.CATEGORY.
Standard method, using the minimal definition of an alt to derive its full API.
module Over_category_and_via_arrow_and_fst
(Category : Preface_specs.CATEGORY)
(Req :
Preface_specs.Arrow.WITH_ARROW_AND_FST
with type ('a, 'b) t = ('a, 'b) Category.t) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Req.tUsing arrow and split over a Category
Build an Preface_specs.ARROW using Preface_specs.Arrow.WITH_ARROW_AND_SPLIT over a Preface_specs.CATEGORY.
Standard method, using the minimal definition of an alt to derive its full API.
module Over_category_and_via_arrow_and_split
(Category : Preface_specs.CATEGORY)
(Req :
Preface_specs.Arrow.WITH_ARROW_AND_SPLIT
with type ('a, 'b) t = ('a, 'b) Category.t) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Req.tArrow Algebra
Construction of Preface_specs.ARROW by combining them.
Product
Construct the product of two Preface_specs.ARROW.
module Product
(F : Preface_specs.ARROW)
(G : Preface_specs.ARROW) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) F.t * ('a, 'b) G.tFrom other abstraction
From a Strong and a Category
Produces an Preface_specs.ARROW from a Preface_specs.STRONG and a Preface_specs.CATEGORY.
One way of looking at Arrow would be to see them as the conjunction of Category and Strong, as mentioned in Notions of Computation as Monoids by E. Rivas and M. Jaskelioff.
module From_strong_and_category
(Strong : Preface_specs.Strong.WITH_DIMAP_AND_FST)
(Category : Preface_specs.CATEGORY with type ('a, 'b) t = ('a, 'b) Strong.t) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Category.tFrom a Monad
Produces an Preface_specs.ARROW from a Preface_specs.MONAD (using the Kleisli Arrow).
module From_monad
(Monad : Preface_specs.Monad.CORE) :
Preface_specs.ARROW with type ('a, 'b) t = 'a -> 'b Monad.tFrom an Arrow Plus
Produces an Preface_specs.ARROW from an Preface_specs.ARROW_PLUS.
module From_arrow_plus
(Plus : Preface_specs.ARROW_PLUS) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Plus.tFrom an Arrow Alt
Produces an Preface_specs.ARROW from an Preface_specs.ARROW_ALT.
module From_arrow_alt
(Alt : Preface_specs.ARROW_ALT) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Alt.tFrom an Arrow Zero
Produces an Preface_specs.ARROW from an Preface_specs.ARROW_ZERO.
module From_arrow_zero
(Zero : Preface_specs.ARROW_ZERO) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Zero.tFrom an Arrow Choice
Produces an Preface_specs.ARROW from an Preface_specs.ARROW_CHOICE.
module From_arrow_choice
(Choice : Preface_specs.ARROW_CHOICE) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Choice.tFrom an Arrow Apply
Produces an Preface_specs.ARROW from an Preface_specs.ARROW_APPLY.
module From_arrow_apply
(Apply : Preface_specs.ARROW_APPLY) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Apply.tManual construction
Advanced way to build an Preface_specs.ARROW, constructing and assembling a component-by-component of Preface_specs.ARROW. (In order to provide your own implementation for some features.)
Grouping of all components
module Via
(Core : Preface_specs.Arrow.CORE)
(Operation :
Preface_specs.Arrow.OPERATION with type ('a, 'b) t = ('a, 'b) Core.t)
(Alias :
Preface_specs.Arrow.ALIAS with type ('a, 'b) t = ('a, 'b) Operation.t)
(Infix : Preface_specs.Arrow.INFIX with type ('a, 'b) t = ('a, 'b) Alias.t) :
Preface_specs.ARROW with type ('a, 'b) t = ('a, 'b) Infix.tBuilding Core
module Core_over_category_and_via_arrow_and_fst
(Category : Preface_specs.Category.CORE)
(Req :
Preface_specs.Arrow.WITH_ARROW_AND_FST
with type ('a, 'b) t = ('a, 'b) Category.t) :
Preface_specs.Arrow.CORE with type ('a, 'b) t = ('a, 'b) Req.tmodule Core_over_category_and_via_arrow_and_split
(Category : Preface_specs.Category.CORE)
(Req :
Preface_specs.Arrow.WITH_ARROW_AND_SPLIT
with type ('a, 'b) t = ('a, 'b) Category.t) :
Preface_specs.Arrow.CORE with type ('a, 'b) t = ('a, 'b) Req.tDeriving Operation
module Operation_over_category
(Category : Preface_specs.Category.OPERATION)
(Core : Preface_specs.Arrow.CORE with type ('a, 'b) t = ('a, 'b) Category.t) :
Preface_specs.Arrow.OPERATION with type ('a, 'b) t = ('a, 'b) Core.tDeriving Alias
module Alias
(Operation : Preface_specs.Arrow.OPERATION) :
Preface_specs.Arrow.ALIAS with type ('a, 'b) t = ('a, 'b) Operation.tDeriving Infix
module Infix_over_category
(Category : Preface_specs.Category.INFIX)
(Core : Preface_specs.Arrow.CORE with type ('a, 'b) t = ('a, 'b) Category.t)
(Operation :
Preface_specs.Arrow.OPERATION with type ('a, 'b) t = ('a, 'b) Core.t) :
Preface_specs.Arrow.INFIX with type ('a, 'b) t = ('a, 'b) Operation.t