package monads

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

The reader monad interface with the environment type left variable.

Note, although the type of the environment is variable it still cannot be changed during the computation.

include Trans.S1
type ('a, 'e) t
type 'a m
type ('a, 'e) e
val lift : 'a m -> ('a, 'e) t

lifts inner monad into the resulting monad

val run : ('a, 'e) t -> ('a, 'e) e

runs the computation

val read : unit -> ('e, 'e) t

read () reads the environment.

include Monad2 with type ('a, 'e) t := ('a, 'e) t
val void : ('a, 'e) t -> (unit, 'e) t

void m computes m and discrards the result.

val sequence : (unit, 'e) t list -> (unit, 'e) t

sequence xs computes a sequence of computations xs in the left to right order.

val forever : ('a, 'e) t -> ('b, 'e) t

forever xs creates a computationt that never returns.

module Fn : sig ... end

Various function combinators lifted into the Kleisli category.

module Pair : sig ... end

The pair interface lifted into the monad.

module Triple : sig ... end

The triple interface lifted into a monad.

module Lift : sig ... end

Lifts functions into the monad.

module Exn : sig ... end

Interacting between monads and language exceptions

module Collection : sig ... end

Lifts collection interface into the monad.

module List : Collection.S with type 'a t := 'a list

The Monad.Collection.S2 interface for lists

module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.t

The Monad.Collection.S2 interface for sequences

include Syntax.S2 with type ('a, 'e) t := ('a, 'e) t
val (>=>) : ('a -> ('b, 'e) t) -> ('b -> ('c, 'e) t) -> 'a -> ('c, 'e) t

f >=> g is fun x -> f x >>= g

val (!!) : 'a -> ('a, 'e) t

!!x is return x

val (!$) : ('a -> 'b) -> ('a, 'e) t -> ('b, 'e) t

!$f is Lift.unary f

val (!$$) : ('a -> 'b -> 'c) -> ('a, 'e) t -> ('b, 'e) t -> ('c, 'e) t

!$$f is Lift.binary f

val (!$$$) : ('a -> 'b -> 'c -> 'd) -> ('a, 'e) t -> ('b, 'e) t -> ('c, 'e) t -> ('d, 'e) t

!$$$f is Lift.ternary f

val (!$$$$) : ('a -> 'b -> 'c -> 'd -> 'e) -> ('a, 's) t -> ('b, 's) t -> ('c, 's) t -> ('d, 's) t -> ('e, 's) t

!$$$$f is Lift.quaternary f

val (!$$$$$) : ('a -> 'b -> 'c -> 'd -> 'e -> 'f) -> ('a, 's) t -> ('b, 's) t -> ('c, 's) t -> ('d, 's) t -> ('e, 's) t -> ('f, 's) t

!$$$$$f is Lift.quinary f

include Syntax.Let.S2 with type ('a, 'e) t := ('a, 'e) t
val let* : ('a, 'e) t -> ('a -> ('b, 'e) t) -> ('b, 'e) t

let* r = f x in b is f x >>= fun r -> b

val and* : ('a, 'e) t -> ('b, 'e) t -> ('a * 'b, 'e) t

monoidal product

val let+ : ('a, 'e) t -> ('a -> 'b) -> ('b, 'e) t

let+ r = f x in b is f x >>| fun r -> b

val and+ : ('a, 'e) t -> ('b, 'e) t -> ('a * 'b, 'e) t

monoidal product

include Core_kernel.Monad.S2 with type ('a, 'e) t := ('a, 'e) t
val (>>=) : ('a, 'e) t -> ('a -> ('b, 'e) t) -> ('b, 'e) t
val (>>|) : ('a, 'e) t -> ('a -> 'b) -> ('b, 'e) t
module Let_syntax : sig ... end
module Monad_infix : sig ... end

Same as Infix, except the monad type has two arguments. The second is always just passed through.

val bind : ('a, 'e) t -> f:('a -> ('b, 'e) t) -> ('b, 'e) t
val return : 'a -> ('a, _) t
val map : ('a, 'e) t -> f:('a -> 'b) -> ('b, 'e) t
val join : (('a, 'e) t, 'e) t -> ('a, 'e) t
val ignore_m : (_, 'e) t -> (unit, 'e) t
val all : ('a, 'e) t list -> ('a list, 'e) t
val all_unit : (unit, 'e) t list -> (unit, 'e) t
module Let : Syntax.Let.S2 with type ('a, 'e) t := ('a, 'e) t

Monadic Binding Operators.

module Syntax : Syntax.S2 with type ('a, 'e) t := ('a, 'e) t

Monadic operators, see Monad.Syntax.S2 for more.