sig
  type transform = Uppercase | Lowercase | Capitalize | Uncapitalize
  val transform_of_string : string -> Carcass.Pat.transform option
  val transform_to_string : Carcass.Pat.transform -> string
  val pp_transform : Carcass.Pat.transform Fmt.t
  type lexeme = Lit of string | Var of string * Carcass.Pat.transform option
  type t = (Carcass.Pat.lexeme * Carcass.Loc.t) list * Carcass.Loc.t
  val empty : Carcass.Pat.t
  val dom : Carcass.Pat.t -> Astring.String.set
  val equal : Carcass.Pat.t -> Carcass.Pat.t -> bool
  val compare : Carcass.Pat.t -> Carcass.Pat.t -> int
  val to_string : ?flesh:bool -> Carcass.Pat.t -> string
  val of_input :
    ?flesh:bool ->
    src:Carcass.Loc.src ->
    [ `Channel of Pervasives.in_channel | `String of string ] ->
    (Carcass.Pat.t, [> Carcass.Error.parse ]) Result.result
  val pp : ?flesh:bool -> Carcass.Pat.t Fmt.t
  val subst : (string -> string option) -> Carcass.Pat.t -> Carcass.Pat.t
  type env
  val env :
    ?undef:(string ->
            (Carcass.Pat.t, Carcass.Error.parse) Rresult.result option) ->
    Carcass.Pat.t Astring.String.map -> Carcass.Pat.env
  val env_var_value :
    Carcass.Pat.env ->
    string ->
    (string * Carcass.Loc.t, [> Carcass.Error.eval ]) Rresult.result option
  val eval :
    Carcass.Pat.env ->
    Carcass.Pat.t ->
    (string * Carcass.Loc.t, [> Carcass.Error.eval ]) Rresult.result
  val query :
    ?init:string Astring.String.map ->
    Carcass.Pat.t -> string -> string Astring.String.map option
end