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