Module Chatml.Chatml_lang

type pattern =
  1. | PWildcard
  2. | PVar of string
  3. | PInt of int
  4. | PBool of bool
  5. | PFloat of float
  6. | PString of string
  7. | PVariant of string * pattern list
type expr =
  1. | EInt of int
  2. | EBool of bool
  3. | EFloat of float
  4. | EString of string
  5. | EVar of string
  6. | ELambda of string list * expr
  7. | EApp of expr * expr list
  8. | EIf of expr * expr * expr
  9. | EWhile of expr * expr
  10. | ELetIn of string * expr * expr
  11. | ELetRec of (string * expr) list * expr
  12. | EMatch of expr * (pattern * expr) list
  13. | ERecord of (string * expr) list
  14. | EFieldGet of expr * string
  15. | EFieldSet of expr * string * expr
  16. | EVariant of string * expr list
  17. | EArray of expr list
  18. | EArrayGet of expr * expr
  19. | EArraySet of expr * expr * expr
  20. | ERef of expr
  21. | ESetRef of expr * expr
  22. | ESequence of expr * expr
  23. | EDeref of expr
type stmt =
  1. | SLet of string * expr
  2. | SLetRec of (string * expr) list
  3. | SModule of string * stmt list
  4. | SOpen of string
  5. | SExpr of expr
type program = stmt list
type value =
  1. | VInt of int
  2. | VBool of bool
  3. | VFloat of float
  4. | VString of string
  5. | VVariant of string * value list
  6. | VRecord of (string, value) Core.Hashtbl.t
  7. | VArray of value array
  8. | VRef of value Core.ref
  9. | VClosure of clos
  10. | VModule of env
  11. | VUnit
  12. | VBuiltin of value list -> value
and clos = {
  1. params : string list;
  2. body : expr;
  3. env : env;
}
and env = (string, value) Core.Hashtbl.t
val create_env : unit -> env
val copy_env : env -> env
val find_var : env -> string -> value option
val set_var : env -> string -> value -> unit
val a : string -> string -> string -> unit
val match_pattern : value -> pattern -> (string * value) list option
type eval_result =
  1. | Value of value
  2. | TailCall of clos * value list
val finish_eval : eval_result -> value
val eval_expr : env -> expr -> eval_result
val match_eval : env -> value -> (pattern * expr) list -> eval_result
val eval_stmt : env -> stmt -> unit
val eval_program : env -> program -> unit
module Chatml_alpha : sig ... end