sig
  val log : Dtools.Log.t
  type t = Lang_types.t
  type value = { mutable t : Lang.t; value : Lang.in_value; }
  and full_env =
      (string * ((int * Lang_types.constraints) list * Lang.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.value list
    | Product of Lang.value * Lang.value
    | Ref of Lang.value Pervasives.ref
    | Fun of (string * string * Lang.value option) list * Lang.full_env *
        Lang.full_env * Lang_values.term
    | FFI of (string * string * Lang.value option) list * Lang.full_env *
        (Lang.full_env -> Lang.t -> Lang.value)
  type env = (string * Lang.value) list
  val print_value : Lang.value -> string
  val iter_sources : (Source.source -> unit) -> Lang.value -> unit
  val apply : Lang.value -> Lang.env -> t:Lang.t -> Lang.value
  type proto = (string * Lang.t * Lang.value option * string option) list
  type doc_flag = Hidden | Deprecated | Experimental
  val add_builtin :
    category:string ->
    descr:string ->
    ?flags:Lang.doc_flag list ->
    string ->
    Lang.proto -> Lang.t -> (Lang.env -> Lang.t -> Lang.value) -> unit
  val add_builtin_base :
    category:string ->
    descr:string ->
    ?flags:Lang.doc_flag list -> string -> Lang.in_value -> Lang.t -> unit
  type category =
      Input
    | Output
    | Conversions
    | TrackProcessing
    | SoundProcessing
    | VideoProcessing
    | MIDIProcessing
    | Visualization
    | SoundSynthesis
    | Liquidsoap
  val string_of_category : Lang.category -> string
  val string_of_flag : Lang.doc_flag -> string
  type lang_kind_format = Fixed of int | Variable of int | Any_fixed of int
  type lang_kind_formats =
      Unconstrained of Lang.t
    | Constrained of
        (Lang.lang_kind_format, Lang.lang_kind_format, Lang.lang_kind_format)
        Frame.fields
  val any_fixed : Lang.lang_kind_formats
  val any_fixed_with :
    ?audio:int -> ?video:int -> ?midi:int -> unit -> Lang.lang_kind_formats
  val empty : Lang.lang_kind_formats
  val audio_any : Lang.lang_kind_formats
  val audio_mono : Lang.lang_kind_formats
  val audio_stereo : Lang.lang_kind_formats
  val audio_n : int -> Lang.lang_kind_formats
  val audio_variable : Lang.lang_kind_formats
  val video_only : Lang.lang_kind_formats
  val video_n : int -> Lang.lang_kind_formats
  val midi_n : int -> Lang.lang_kind_formats
  val midi_only : Lang.lang_kind_formats
  val audio_video_any : Lang.lang_kind_formats
  val kind_type_of_kind_format :
    fresh:int -> Lang.lang_kind_formats -> Lang.t
  val add_operator :
    category:Lang.category ->
    descr:string ->
    ?flags:Lang.doc_flag list ->
    ?active:bool ->
    string ->
    Lang.proto ->
    kind:Lang.lang_kind_formats ->
    (Lang.env -> Frame.content_kind -> Source.source) -> unit
  val to_unit : Lang.value -> unit
  val to_bool : Lang.value -> bool
  val to_string : Lang.value -> string
  val to_string_getter : Lang.value -> unit -> string
  val to_float : Lang.value -> float
  val to_float_getter : Lang.value -> unit -> float
  val to_source : Lang.value -> Source.source
  val to_format : Lang.value -> Encoder.format
  val to_request : Lang.value -> Request.t
  val to_int : Lang.value -> int
  val to_list : Lang.value -> Lang.value list
  val to_product : Lang.value -> Lang.value * Lang.value
  val to_metadata : Lang.value -> Frame.metadata
  val to_string_list : Lang.value -> string list
  val to_int_list : Lang.value -> int list
  val to_source_list : Lang.value -> Source.source list
  val to_fun :
    t:Lang.t -> Lang.value -> (string * Lang.value) list -> Lang.value
  val assoc : '-> int -> ('a * 'b) list -> 'b
  val int_t : Lang.t
  val unit_t : Lang.t
  val float_t : Lang.t
  val bool_t : Lang.t
  val string_t : Lang.t
  val product_t : Lang.t -> Lang.t -> Lang.t
  val of_product_t : Lang.t -> Lang.t * Lang.t
  val list_t : Lang.t -> Lang.t
  val of_list_t : Lang.t -> Lang.t
  val zero_t : Lang.t
  val variable_t : Lang.t
  val succ_t : Lang.t -> Lang.t
  val add_t : int -> Lang.t -> Lang.t
  val type_of_int : int -> Lang.t
  val request_t : Lang.t -> Lang.t
  val of_request_t : Lang.t -> Lang.t
  val source_t : Lang.t -> Lang.t
  val of_source_t : Lang.t -> Lang.t
  val format_t : Lang.t -> Lang.t
  val frame_kind_t : audio:Lang.t -> video:Lang.t -> midi:Lang.t -> Lang.t
  val of_frame_kind_t : Lang.t -> (Lang.t, Lang.t, Lang.t) Frame.fields
  val frame_kind_of_kind_type : Lang.t -> Frame.content_kind
  val kind_type_of_frame_kind : Frame.content_kind -> Lang.t
  val fun_t : (bool * string * Lang.t) list -> Lang.t -> Lang.t
  val univ_t : ?constraints:Lang_types.constraints -> int -> Lang.t
  val metadata_t : Lang.t
  val string_getter_t : int -> Lang.t
  val float_getter_t : int -> Lang.t
  val unit : Lang.value
  val int : int -> Lang.value
  val bool : bool -> Lang.value
  val float : float -> Lang.value
  val string : string -> Lang.value
  val list : t:Lang.t -> Lang.value list -> Lang.value
  val source : Source.source -> Lang.value
  val request : Request.t -> Lang.value
  val product : Lang.value -> Lang.value -> Lang.value
  val val_fun :
    (string * string * Lang.t * Lang.value option) list ->
    ret_t:Lang.t -> (Lang.env -> Lang.t -> Lang.value) -> Lang.value
  val val_cst_fun :
    (string * Lang.t * Lang.value option) list -> Lang.value -> Lang.value
  val metadata : Frame.metadata -> Lang.value
  exception Invalid_value of Lang.value * string
  exception Clock_conflict of (Lang_types.pos option * string * string)
  exception Clock_loop of (Lang_types.pos option * string * string)
  val load_libs : ?parse_only:bool -> unit -> unit
  val from_in_channel :
    ?parse_only:bool -> lib:bool -> Pervasives.in_channel -> unit
  val from_file : ?parse_only:bool -> lib:bool -> string -> unit
  val from_string : ?parse_only:bool -> lib:bool -> string -> unit
  val interactive : unit -> unit
  val eval : string -> Lang.value option
end