package monads

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

The Sequence monad.

The sequence monad is the same as the list monad, except the sequences are used to represent multiple results.

module type S = sig ... end
module type S2 = sig ... end
include S with type 'a t = 'a Core_kernel.Sequence.t and type 'a m = 'a and type 'a e = 'a Core_kernel.Sequence.t
include Trans.S with type 'a t = 'a Core_kernel.Sequence.t with type 'a m = 'a with type 'a e = 'a Core_kernel.Sequence.t
type 'a t = 'a Core_kernel.Sequence.t
type 'a m = 'a
type 'a e = 'a Core_kernel.Sequence.t
val lift : 'a m -> 'a t

lifts inner monad into the resulting monad

val run : 'a t -> 'a e

runs the computation

include Monad with type 'a t := 'a t
val void : 'a t -> unit t

void m computes m and discrards the result.

val sequence : unit t list -> unit t

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

val forever : 'a t -> 'b 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.S interface for lists

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

The Monad.Collection.S interface for sequences

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

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

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

!!x is return x

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

!$f is Lift.unary f

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

!$$f is Lift.binary f

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

!$$$f is Lift.ternary f

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

!$$$$f is Lift.quaternary f

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

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

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

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

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

monoidal product

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

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

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

monoidal product

include Core_kernel.Monad.S with type 'a t := 'a t
val (>>=) : 'a t -> ('a -> 'b t) -> 'b t

t >>= f returns a computation that sequences the computations represented by two monad elements. The resulting computation first does t to yield a value v, and then runs the computation returned by f v.

val (>>|) : 'a t -> ('a -> 'b) -> 'b t

t >>| f is t >>= (fun a -> return (f a)).

module Monad_infix : sig ... end
val bind : 'a t -> f:('a -> 'b t) -> 'b t

bind t ~f = t >>= f

val return : 'a -> 'a t

return v returns the (trivial) computation that returns v.

val map : 'a t -> f:('a -> 'b) -> 'b t

map t ~f is t >>| f.

val join : 'a t t -> 'a t

join t is t >>= (fun t' -> t').

val ignore_m : 'a t -> unit t

ignore_m t is map t ~f:(fun _ -> ()). ignore_m used to be called ignore, but we decided that was a bad name, because it shadowed the widely used Caml.ignore. Some monads still do let ignore = ignore_m for historical reasons.

val all : 'a t list -> 'a list t
val all_unit : unit t list -> unit t

Like all, but ensures that every monadic value in the list produces a unit value, all of which are discarded rather than being collected into a list.

module Let_syntax : sig ... end

These are convenient to have in scope when programming with a monad:

module Let : Syntax.Let.S with type 'a t := 'a t

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

module Syntax : Syntax.S with type 'a t := 'a t

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

include Choice.S with type 'a t := 'a t
include Choice.Basic with type 'a t := 'a t
val pure : 'a -> 'a t

pure x creates a computation that results in x.

val accept : 'a -> 'a t

accept x accepts x as a result of computation. (Same as pure x.

val reject : unit -> 'a t

reject () rejects the rest of computation sequence, and terminate the computation with the zero result (Same as zero ()

val guard : bool -> unit t

guard cond ensures cond is true in the rest of computation. Otherwise the rest of the computation is rejected.

val on : bool -> unit t -> unit t

on cond x computes x only iff cond is true

val unless : bool -> unit t -> unit t

unless cond x computes x unless cond is true.

include Plus.S with type 'a t := 'a t
val zero : unit -> 'a t

zero () constructs a zero element

val plus : 'a t -> 'a t -> 'a t

plus x y an associative operation.

module T1 (M : Core_kernel.T1) : sig ... end
module Make (M : Monad) : S with type 'a m := 'a T1(M).m and type 'a t := 'a T1(M).t and type 'a e := 'a T1(M).e

Make(M) composes the Seq monad with M

module T2 (M : Core_kernel.T2) : sig ... end
module Make2 (M : Monad2) : S2 with type ('a, 'e) m := ('a, 'e) T2(M).m and type ('a, 'e) t := ('a, 'e) T2(M).t and type ('a, 'e) e := ('a, 'e) T2(M).e

Make2(M) composes the Seq monad with M