sig
  type t =
      P_prefix
    | P_infix of int
    | P_infix_left of int
    | P_infix_right of int
    | P_special
  type context =
      Field
    | App_right
    | App_left
    | Infix_left of Precedence.t
    | Infix_right of Precedence.t
    | Delimited
  type exp_kind = App | Infix of Precedence.t | Let | Atomic
  type pat_context = Plist | Pas_left | Pcons_left | Pcons_right | Pdelimited
  type pat_kind = Papp | Pas | Padd | Pcons | Patomic
  val is_infix : Precedence.t -> bool
  val needs_parens : Precedence.context -> Precedence.exp_kind -> bool
  val pat_needs_parens :
    Precedence.pat_context -> Precedence.pat_kind -> bool
  val get_prec :
    Target.target ->
    Typed_ast.env -> Typed_ast.const_descr_ref -> Precedence.t
  val get_prec_exp :
    Target.target -> Typed_ast.env -> Typed_ast.exp -> Precedence.t
end