package current

  1. Overview
  2. Docs

Parameters

module Input : S.INPUT

Signature

include S.TERM with type 'a input := 'a Input.t
type +'a t

An 'a t is a term that produces a value of type 'a.

type description

Information about operations hidden behind a bind.

val active : Output.active -> 'a t

active x is a term indicating that the result is not determined yet.

val return : ?label:string -> 'a -> 'a t

return x is a term that immediately succeeds with x.

  • parameter label

    Label the constant in the diagrams.

val fail : string -> 'a t

fail m is a term that immediately fails with message m.

val state : ?hidden:bool -> 'a t -> ('a, [ `Active of Output.active | `Msg of string ]) result t

state t always immediately returns a successful result giving the current state of t.

  • parameter hidden

    If true, don't show a separate node for this on the diagrams.

val catch : ?hidden:bool -> 'a t -> 'a S.or_error t

catch t successfully returns Ok x if t evaluates successfully to x, or successfully returns Error e if t fails with error e. If t is active then catch t will be active too.

  • parameter hidden

    If true, don't show a separate node for this on the diagrams.

val ignore_value : 'a t -> unit t

ignore_value x is map ignore x.

val of_output : 'a Output.t -> 'a t

of_output x is a returned, failed or active term.

Sequencing terms

Applicative operations

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

map f x is a term that runs x and then transforms the result using f.

val map_error : (string -> string) -> 'a t -> 'a t

map_error f x is a term that runs x and then transforms the error string (if any) using f.

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

pair a b is the pair containing the results of evaluating a and b (in parallel).

val list_map : pp:'a Fmt.t -> ('a t -> 'b t) -> 'a list t -> 'b list t

list_map ~pp f xs adds f to the end of each input term and collects all the results into a single list.

  • parameter pp

    Label the instances.

val list_iter : pp:'a Fmt.t -> ('a t -> unit t) -> 'a list t -> unit t

Like list_map but for the simpler case when the result is unit.

val list_seq : 'a t list -> 'a list t

list_seq x evaluates to a list containing the results of evaluating each element in x, once all elements of x have successfully completed.

val option_map : ('a t -> 'b t) -> 'a option t -> 'b option t

option_map f x is a term that evaluates to Some (f y) if x evaluates to Some y, or to None otherwise.

val option_seq : 'a t option -> 'a option t

option_seq None is Current.return None and option_seq (Some x) is Current.map some x. This is useful for handling optional arguments that are currents.

val all : unit t list -> unit t

all xs is a term that succeeds if every term in xs succeeds.

val all_labelled : (string * unit t) list -> unit t

all xs is a term that succeeds if every term in xs succeeds. The labels are used if some terms fail, to indicate which ones are failing.

val gate : on:unit t -> 'a t -> 'a t

gate ~on:ctrl x is the same as x, once ctrl succeeds.

Monadic operations

N.B. these operations create terms that cannot be statically analysed until after they are executed.

val bind : ?info:description -> ('a -> 'b t) -> 'a t -> 'b t

bind f x is a term that first runs x to get y and then behaves as the term f y. Static analysis cannot look inside the f function until x is ready, so using bind makes static analysis less useful. You can use the info argument to provide some information here.

val bind_input : info:description -> ('a -> 'b Input.t) -> 'a t -> 'b t

bind_input ~info f x is a term that first runs x to get y and then behaves as the input f y. info is used to describe the operation in the analysis result.

val component : ('a, Format.formatter, unit, description) format4 -> 'a

component name is used to annotate binds, so that the system can show a name for the operations hidden inside the bind's function. name is used as the label for the bind in the generated dot diagrams. For convenience, name can also be a format string.

module Syntax : sig ... end
val env : Input.env t

env evaluates to the user-provided environment.

module Analysis : S.ANALYSIS with type 'a term := 'a t and type job_id := Input.job_id
module Executor : S.EXECUTOR with type 'a term := 'a t and type env := Input.env and type analysis := Analysis.t