Module Ast.Expression

type rec_flag =
  1. | Nonrecursive
    (*

    zanuda is zanuda

    *)
  2. | Recursive
    (*

    zanuda is zanuda

    *)
val equal_rec_flag : rec_flag -> rec_flag -> bool
val pp_rec_flag : Stdlib.Format.formatter -> rec_flag -> unit
val show_rec_flag : rec_flag -> ident
val gen_rec_flag : rec_flag QCheck.Gen.t
val arb_rec_flag : rec_flag QCheck.arbitrary
type 'expr value_binding = {
  1. pat : Pattern.t;
  2. expr : 'expr;
}
val equal_value_binding : ('expr -> 'expr -> bool) -> 'expr value_binding -> 'expr value_binding -> bool
val pp_value_binding : (Stdlib.Format.formatter -> 'expr -> unit) -> Stdlib.Format.formatter -> 'expr value_binding -> unit
val show_value_binding : (Stdlib.Format.formatter -> 'expr -> unit) -> 'expr value_binding -> ident
val gen_value_binding : (int -> 'a QCheck.Gen.t) -> int -> 'a value_binding QCheck.Gen.t
type 'expr case = {
  1. first : Pattern.t;
  2. second : 'expr;
}
val equal_case : ('expr -> 'expr -> bool) -> 'expr case -> 'expr case -> bool
val pp_case : (Stdlib.Format.formatter -> 'expr -> unit) -> Stdlib.Format.formatter -> 'expr case -> unit
val show_case : (Stdlib.Format.formatter -> 'expr -> unit) -> 'expr case -> ident
val gen_case : (int -> 'a QCheck.Gen.t) -> int -> 'a case QCheck.Gen.t
type t =
  1. | Exp_ident of ident
    (*

    Identifiers such as x and M.x.

    *)
  2. | Exp_constant of Constant.t
    (*

    Expressions with constants such as 1, 'a', "true".

    *)
  3. | Exp_tuple of t List2.t
    (*

    A tuple expression, such as (E1, E2, ..., En).

    *)
  4. | Exp_function of t case List1.t
    (*

    A function with pattern matching, such as function P1 -> E1 | ... | Pn -> En.

    *)
  5. | Exp_fun of Pattern.t List1.t * t
    (*

    A function expression, such as fun P1 ... Pn -> E.

    *)
  6. | Exp_apply of t * t
    (*

    Function application, such as E0 E1.

    *)
  7. | Exp_match of t * t case List1.t
    (*

    A match expression, such as match E0 with P1 -> E1 | ... | Pn -> En.

    *)
  8. | Exp_constraint of t * TypeExpr.t
    (*

    A type constraint, such as (E : T).

    *)
  9. | Exp_if of t * t * t option
    (*

    An if-then-else expression, such as if E1 then E2 else E3.

    *)
  10. | Exp_let of rec_flag * t value_binding List1.t * t
    (*

    A let-binding, such as let P1 = E1 and ... and Pn = En in E.

    *)
  11. | Exp_construct of ident * t option
    (*

    A constructor expression, such as C or C E.

    *)
val equal : t -> t -> bool
val pp : Stdlib.Format.formatter -> t -> unit
val show : t -> ident
val gen_sized : int -> t QCheck.Gen.t
val gen : t QCheck.Gen.t
val arb_sized : int -> t QCheck.arbitrary
val arb : t QCheck.arbitrary