preface

An opinionated library for function programming (à La Haskell)
IN THIS PACKAGE

Using the minimal definition

Using apply over an Arrow

Build an Preface_specs.ARROW_APPLY using Preface_specs.Arrow_apply.WITH_APPLY over an Preface_specs.ARROW.

Standard method, using the minimal definition of an alt to derive its full API.

module Over_arrow (Arrow : Preface_specs.ARROW) (Apply : Preface_specs.Arrow_apply.WITH_APPLY with type ('a, 'b) t = ( 'a, 'b ) Arrow.t) : Preface_specs.ARROW_APPLY with type ('a, 'b) t = ( 'a, 'b ) Apply.t

Using apply, arrow and fst over a Category

Build an Preface_specs.ARROW_APPLY using Preface_specs.Arrow_apply.WITH_ARROW_AND_FST over a Preface_specs.CATEGORY.

Standard method, using the minimal definition of an alt to derive its full API.

Using apply, arrow and split over a Category

Build an Preface_specs.ARROW_APPLY using Preface_specs.Arrow_apply.WITH_ARROW_AND_SPLIT over a Preface_specs.CATEGORY.

Standard method, using the minimal definition of an alt to derive its full API.

From other abstraction

From a Monad

Produces an Preface_specs.ARROW_APPLY from a Preface_specs.MONAD (using the Kleisli Arrow).

module From_monad (Monad : Preface_specs.Monad.CORE) : Preface_specs.ARROW_APPLY with type ('a, 'b) t = 'a -> 'b Monad.t

Manual construction

Advanced way to build an Preface_specs.ARROW_APPLY, constructing and assembling a component-by-component of Preface_specs.ARROW_APPLY. (In order to provide your own implementation for some features.)

Grouping of all components

module Via (Core : Preface_specs.Arrow_apply.CORE) (Operation : Preface_specs.Arrow_apply.OPERATION with type ('a, 'b) t = ( 'a, 'b ) Core.t) (Alias : Preface_specs.Arrow_apply.ALIAS with type ('a, 'b) t = ( 'a, 'b ) Operation.t) (Infix : Preface_specs.Arrow_apply.INFIX with type ('a, 'b) t = ( 'a, 'b ) Alias.t) : Preface_specs.ARROW_APPLY with type ('a, 'b) t = ( 'a, 'b ) Infix.t

Building Core

Deriving Operation

Deriving Alias

Deriving Infix

module Infix_over_category (Category : Preface_specs.Category.INFIX) (Core : Preface_specs.Arrow_apply.CORE with type ('a, 'b) t = ( 'a, 'b ) Category.t) (Operation : Preface_specs.Arrow_apply.OPERATION with type ('a, 'b) t = ( 'a, 'b ) Core.t) : Preface_specs.Arrow_apply.INFIX with type ('a, 'b) t = ( 'a, 'b ) Operation.t