Preface_make.ArrowBuilding a Preface_specs.Arrow
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.tBuild 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.tConstruction of Preface_specs.ARROW by combining them.
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.tProduces 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.tProduces 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.tProduces 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.tProduces 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.tProduces 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.tProduces 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.tProduces 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.tAdvanced 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.)
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.tmodule 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.tmodule 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.tmodule Alias
(Operation : Preface_specs.Arrow.OPERATION) :
Preface_specs.Arrow.ALIAS with type ('a, 'b) t = ('a, 'b) Operation.tmodule 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