Module type Selective.CORE

Basis operation.

type 'a t

The type held by the Selective.

inline

include Indexed_selective.CORE with type ('a, _) t := 'a t
val select : ('a, 'b) Stdlib.Either.t t -> ('a -> 'b) t -> 'b t

select e f apply f if e is Left. It allow to skip effect using Right.

val branch : ('a, 'b) Stdlib.Either.t t -> ('a -> 'c) t -> ('b -> 'c) t -> 'c t

branch is like select. It chooses between two effects.

include Indexed_applicative.WITH_PURE with type ('a, 'index) t := 'a t
include Indexed_apply.WITH_APPLY with type ('a, 'index) t := 'a t
val apply : ('a -> 'b) t -> 'a t -> 'b t

May apply a function wrapped into an t to a value also wrapped into an t.

include Indexed_applicative.WITH_PURE with type ('a, 'index) t := 'a t
include Indexed_apply.WITH_MAP_AND_PRODUCT with type ('a, 'index) t := 'a t
include Indexed_functor.WITH_MAP with type ('a, 'index) t := 'a t
val map : ('a -> 'b) -> 'a t -> 'b t

Mapping over t from 'a to 'b.

include Indexed_apply.WITH_PRODUCT with type ('a, 'index) t := 'a t
val product : 'a t -> 'b t -> ('a * 'b) t

Monoidal product between two t.

include Indexed_applicative.WITH_PURE with type ('a, 'index) t := 'a t
val pure : 'a -> 'a t

Lift a value from 'a into a new t.

include Indexed_apply.WITH_LIFT2 with type ('a, 'index) t := 'a t
val lift2 : ('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c t

Lift a binary function that acts on arbitrary values into a function that acts t values.