Module Async_extended.Ltl.Make.Expression

'a t can be applied to a state and a variable assignment to return 'a or fail. The reason we wrap this up in an opaque type is that our solver keeps track of the variables used in each expression.

See documentation of the predicate function below for an example of use.

include Core.Applicative.S
type 'a t
val return : 'a ‑> 'a t
val apply : ('a ‑> 'b) t ‑> 'a t ‑> 'b t
val map : 'a t ‑> f:('a ‑> 'b) ‑> 'b t
val map2 : 'a t ‑> 'b t ‑> f:('a ‑> 'b ‑> 'c) ‑> 'c t
val map3 : 'a t ‑> 'b t ‑> 'c t ‑> f:('a ‑> 'b ‑> 'c ‑> 'd) ‑> 'd t
val all : 'a t list ‑> 'a list t
val all_ignore : unit t list ‑> unit t
val both : 'a t ‑> 'b t ‑> ('a * 'b) t
module Applicative_infix : sig ... end
include module type of Applicative_infix
val (<*>) : ('a ‑> 'b) t ‑> 'a t ‑> 'b t

same as apply

val (<*) : 'a t ‑> unit t ‑> 'a t
val (*>) : unit t ‑> 'a t ‑> 'a t
val field : 'a Field.t ‑> 'a t

Fails if it uses a field that is missing from the state.

val maybe_field : 'a Field.t ‑> 'a option t

Evaluates to None if the field is missing from the state. Never fails.

val variable : 'a Variable.t ‑> 'a t
module Args : Core.Applicative.Args with type arg := a t