sig
  type id = string
  val pp_id :
    Format.formatter -> Xinterp_util.id -> Ppx_deriving_runtime.unit
  val show_id : Xinterp_util.id -> Ppx_deriving_runtime.string
  type op2 = Interp_util.op2 = LT | GT | Eq | Add | Sub | Mul | Div | Mod
  val pp_op2 :
    Format.formatter -> Xinterp_util.op2 -> Ppx_deriving_runtime.unit
  val show_op2 : Xinterp_util.op2 -> Ppx_deriving_runtime.string
  type const = Interp_util.const = Int of int | Bool of bool
  val pp_const :
    Format.formatter -> Xinterp_util.const -> Ppx_deriving_runtime.unit
  val show_const : Xinterp_util.const -> Ppx_deriving_runtime.string
  type exp =
      Id of Xinterp_util.id
    | Const of Xinterp_util.const
    | Op2 of Xinterp_util.op2 * Xinterp_util.exp * Xinterp_util.exp
    | If of Xinterp_util.exp * Xinterp_util.exp * Xinterp_util.exp
    | Let of Xinterp_util.id * Xinterp_util.exp * Xinterp_util.exp
    | Fun of Xinterp_util.id * Xinterp_util.exp
    | Fix of Xinterp_util.id * Xinterp_util.exp
    | App of Xinterp_util.exp * Xinterp_util.exp
    | Empty
    | Cons of Xinterp_util.exp * Xinterp_util.exp
    | Head of Xinterp_util.exp
    | Tail of Xinterp_util.exp
    | IsEmpty of Xinterp_util.exp
    | Record of (string * Xinterp_util.exp) list
    | GetField of Xinterp_util.exp * string
    | MkArray of Xinterp_util.exp * Xinterp_util.exp
    | GetArray of Xinterp_util.exp * Xinterp_util.exp
    | SetArray of Xinterp_util.exp * Xinterp_util.exp * Xinterp_util.exp
  val pp_exp :
    Format.formatter -> Xinterp_util.exp -> Ppx_deriving_runtime.unit
  val show_exp : Xinterp_util.exp -> Ppx_deriving_runtime.string
  val from_string : string -> Xinterp_util.exp
  val from_file : string -> Xinterp_util.exp
end