Preface_make.Arrow
Building 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.t
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.t
Construction 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.t
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.t
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.t
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.t
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.t
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.t
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.t
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.t
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.)
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.t
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.t
module 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.t
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.t
module Alias
(Operation : Preface_specs.Arrow.OPERATION) :
Preface_specs.Arrow.ALIAS with type ('a, 'b) t = ('a, 'b) Operation.t
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