sig
  type 'a t = 'a Syntax.term
  val equal : 'a Syntax.term -> 'a Syntax.term -> bool
  val compare : 'a Syntax.term -> 'a Syntax.term -> int
  val hash : 'a Syntax.term -> int
  val pp :
    ?env:string Syntax.Env.t ->
    'a Syntax.context -> Format.formatter -> 'a Syntax.term -> unit
  val show :
    ?env:string Syntax.Env.t -> 'a Syntax.context -> 'a Syntax.term -> string
  val destruct :
    'a Syntax.context ->
    'a Syntax.term -> ('a Syntax.term, 'a) Syntax.open_term
  val eval :
    'a Syntax.context ->
    (('b, 'a) Syntax.open_term -> 'b) -> 'a Syntax.term -> 'b
  val eval_partial :
    'a Syntax.context ->
    (('b, 'a) Syntax.open_term -> 'b option) -> 'a Syntax.term -> 'b option
end