sig
  type value = {
    mutable t : Lang_values.T.t;
    value : Lang_values.V.in_value;
  }
  and full_env =
      (string *
       ((int * Lang_values.T.constraints) list * Lang_values.V.value))
      list
  and in_value =
      Unit
    | Bool of bool
    | Int of int
    | String of string
    | Float of float
    | Source of Source.source
    | Request of Request.t
    | Encoder of Encoder.format
    | List of Lang_values.V.value list
    | Product of Lang_values.V.value * Lang_values.V.value
    | Ref of Lang_values.V.value Pervasives.ref
    | Fun of (string * string * Lang_values.V.value option) list *
        Lang_values.V.full_env * Lang_values.V.full_env * Lang_values.term
    | FFI of (string * string * Lang_values.V.value option) list *
        Lang_values.V.full_env *
        (Lang_values.V.full_env -> Lang_values.T.t -> Lang_values.V.value)
  type env = (string * Lang_values.V.value) list
  val print_value : Lang_values.V.value -> string
  val map_env : ('-> 'b) -> ('c * ('d * 'a)) list -> ('c * ('d * 'b)) list
  val tm_map_types :
    ((int * Lang_values.T.constraints) list ->
     Lang_values.T.t -> Lang_values.T.t) ->
    (int * Lang_values.T.constraints) list ->
    Lang_values.term -> Lang_values.term
  val map_types :
    ((int * Lang_values.T.constraints) list ->
     Lang_values.T.t -> Lang_values.T.t) ->
    (int * Lang_values.T.constraints) list ->
    Lang_values.V.value -> Lang_values.V.value
end