sig
  type 'a t
  val regex : Re.t -> string Tyre.t
  val conv : ('-> 'b) -> ('-> 'a) -> 'Tyre.t -> 'Tyre.t
  val opt : 'Tyre.t -> 'a option Tyre.t
  val alt : 'Tyre.t -> 'Tyre.t -> [ `Left of '| `Right of 'b ] Tyre.t
  type 'a gen = unit -> 'a option
  val rep : 'Tyre.t -> 'Tyre.gen Tyre.t
  val rep1 : 'Tyre.t -> ('a * 'Tyre.gen) Tyre.t
  val seq : 'Tyre.t -> 'Tyre.t -> ('a * 'b) Tyre.t
  val prefix : 'Tyre.t -> 'Tyre.t -> 'Tyre.t
  val suffix : 'Tyre.t -> 'Tyre.t -> 'Tyre.t
  val ( <|> ) :
    'Tyre.t -> 'Tyre.t -> [ `Left of '| `Right of 'b ] Tyre.t
  val ( <&> ) : 'Tyre.t -> 'Tyre.t -> ('a * 'b) Tyre.t
  val ( *> ) : 'Tyre.t -> 'Tyre.t -> 'Tyre.t
  val ( <* ) : 'Tyre.t -> 'Tyre.t -> 'Tyre.t
  module Infix :
    sig
      val ( <|> ) :
        'Tyre.t -> 'Tyre.t -> [ `Left of '| `Right of 'b ] Tyre.t
      val ( <&> ) : 'Tyre.t -> 'Tyre.t -> ('a * 'b) Tyre.t
      val ( *> ) : 'Tyre.t -> 'Tyre.t -> 'Tyre.t
      val ( <* ) : 'Tyre.t -> 'Tyre.t -> 'Tyre.t
    end
  val str : string -> unit Tyre.t
  val char : char -> unit Tyre.t
  val blanks : unit Tyre.t
  val int : int Tyre.t
  val pos_int : int Tyre.t
  val float : float Tyre.t
  val bool : bool Tyre.t
  val list : 'Tyre.t -> 'a list Tyre.t
  val terminated_list : sep:'Tyre.t -> 'Tyre.t -> 'a list Tyre.t
  val separated_list : sep:'Tyre.t -> 'Tyre.t -> 'a list Tyre.t
  val start : unit Tyre.t
  val stop : unit Tyre.t
  val word : 'Tyre.t -> 'Tyre.t
  val whole_string : 'Tyre.t -> 'Tyre.t
  val longest : 'Tyre.t -> 'Tyre.t
  val shortest : 'Tyre.t -> 'Tyre.t
  val first : 'Tyre.t -> 'Tyre.t
  val greedy : 'Tyre.t -> 'Tyre.t
  val non_greedy : 'Tyre.t -> 'Tyre.t
  val nest : 'Tyre.t -> 'Tyre.t
  type 'a re
  val compile : 'Tyre.t -> 'Tyre.re
  type 'a error =
      [ `ConverterFailure of exn | `NoMatch of 'Tyre.re * string ]
  val pp_error : Format.formatter -> 'Tyre.error -> unit
  val exec :
    ?pos:int ->
    ?len:int -> 'Tyre.re -> string -> ('a, 'Tyre.error) Result.result
  val execp : ?pos:int -> ?len:int -> 'Tyre.re -> string -> bool
  val all :
    ?pos:int ->
    ?len:int ->
    'Tyre.re -> string -> ('a list, 'Tyre.error) Result.result
  val all_gen : ?pos:int -> ?len:int -> 'Tyre.re -> string -> 'Tyre.gen
  type +'a route = Route : 'Tyre.t * ('-> 'a) -> 'Tyre.route
  val ( --> ) : 'Tyre.t -> ('-> 'a) -> 'Tyre.route
  val route : 'Tyre.route list -> 'Tyre.re
  val eval : 'Tyre.t -> '-> string
  val evalpp : 'Tyre.t -> Format.formatter -> '-> unit
  val pp : Format.formatter -> 'Tyre.t -> unit
  val pp_re : Format.formatter -> 'Tyre.re -> unit
  module Internal :
    sig
      type ('a, 'b) conv = { to_ : '-> 'b; from_ : '-> 'a; }
      type 'a raw =
          Regexp : Re.t * Re.re Lazy.t -> string Tyre.Internal.raw
        | Conv : 'Tyre.Internal.raw *
            ('a, 'b) Tyre.Internal.conv -> 'Tyre.Internal.raw
        | Opt : 'Tyre.Internal.raw -> 'a option Tyre.Internal.raw
        | Alt : 'Tyre.Internal.raw *
            'Tyre.Internal.raw -> [ `Left of '| `Right of 'b ]
                                    Tyre.Internal.raw
        | Seq : 'Tyre.Internal.raw *
            'Tyre.Internal.raw -> ('a * 'b) Tyre.Internal.raw
        | Prefix : 'Tyre.Internal.raw *
            'Tyre.Internal.raw -> 'Tyre.Internal.raw
        | Suffix : 'Tyre.Internal.raw *
            'Tyre.Internal.raw -> 'Tyre.Internal.raw
        | Rep : 'Tyre.Internal.raw -> 'Tyre.gen Tyre.Internal.raw
        | Mod : (Re.t -> Re.t) * 'Tyre.Internal.raw -> 'Tyre.Internal.raw
      val from_t : 'Tyre.t -> 'Tyre.Internal.raw
      val to_t : 'Tyre.Internal.raw -> 'Tyre.t
      type _ wit =
          Lit : int -> string Tyre.Internal.wit
        | Conv : 'Tyre.Internal.wit *
            ('a, 'b) Tyre.Internal.conv -> 'Tyre.Internal.wit
        | Opt : Re.markid *
            'Tyre.Internal.wit -> 'a option Tyre.Internal.wit
        | Alt : Re.markid * 'Tyre.Internal.wit *
            'Tyre.Internal.wit -> [ `Left of '| `Right of 'b ]
                                    Tyre.Internal.wit
        | Seq : 'Tyre.Internal.wit *
            'Tyre.Internal.wit -> ('a * 'b) Tyre.Internal.wit
        | Rep : int * 'Tyre.Internal.wit *
            Re.re -> 'Tyre.gen Tyre.Internal.wit
      val build :
        int -> 'Tyre.Internal.raw -> int * 'Tyre.Internal.wit * Re.t
      val extract :
        original:string -> 'Tyre.Internal.wit -> Re.substrings -> 'a
    end
end