sig
  module Input :
    sig
      type nonrec 'a t =
        'a RingBuffer.Committed.t = {
        mutable contents : 'a RingBuffer.t;
        mutable mark : int option;
      }
      type mark = Weak of int | Uniq of int
      val pp_with_mark : Format.formatter -> int * int * 'a t -> unit
      val pp : Format.formatter -> 'a t -> unit
      val copy : 'a t -> int -> 'a RingBuffer.t
      val prepare : 'a t -> int -> 'a RingBuffer.t
      val equal : mark -> mark -> bool
      val mark : 'a t -> mark
      val unmark : mark -> 'a t -> unit
      val forget : mark -> 'a t -> unit
      val write : 'a t -> 'a Internal_buffer.t -> int -> int -> unit
      val write_string : 'a t -> string -> int -> int -> unit
      val create_bytes : int -> Internal_buffer.st t
      val create_bigstring : int -> Internal_buffer.bs t
      val create_by : proof:'a Internal_buffer.t -> int -> 'a t
      val size : 'a t -> int
      val peek : 'a t -> 'a Internal_buffer.t -> int -> int -> unit
      val read : 'a t -> 'a Internal_buffer.t -> int -> int -> unit
      val read_space : 'a t -> ('a Internal_buffer.t * int * int) option
      val write_space : 'a t -> ('a Internal_buffer.t * int * int) option
      val transmit :
        'a t -> ('a Internal_buffer.t -> int -> int -> int) -> int
      val ravailable : 'a t -> int
      val wavailable : 'a t -> int
      val radvance : 'a t -> int -> unit
      val wadvance : 'a t -> int -> unit
      val get : 'a t -> char
      val rollback : 'a t -> 'a Internal_buffer.t -> unit
      val proof : 'a t -> 'a Internal_buffer.t
      val savailable : 'a t -> int
    end
  type s = Parser.s = Complete | Incomplete
  val pp : Format.formatter -> MrMime_parser.s -> unit
  type err = Parser.err = ..
  type ('a, 'input) state =
    ('a, 'input) Parser.state =
      Read of { buffer : 'input MrMime_parser.Input.t;
        k : int -> MrMime_parser.s -> ('a, 'input) MrMime_parser.state;
      }
    | Done of 'a
    | Fail of string list * MrMime_parser.err
  type ('a, 'input) k = 'input MrMime_parser.Input.t -> MrMime_parser.s -> 'a
  type ('a, 'input) fail =
      (string list -> MrMime_parser.err -> ('a, 'input) MrMime_parser.state,
       'input)
      MrMime_parser.k
  type ('a, 'r, 'input) success =
      ('a -> ('r, 'input) MrMime_parser.state, 'input) MrMime_parser.k
  type 'a t =
    'a Parser.t = {
    f :
      'r 'input.
        (('r, 'input) MrMime_parser.fail ->
         ('a, 'r, 'input) MrMime_parser.success ->
         ('r, 'input) MrMime_parser.state, 'input)
        MrMime_parser.k;
  }
  val return : 'a -> 'a MrMime_parser.t
  val fail : MrMime_parser.err -> 'a MrMime_parser.t
  val ( >>= ) :
    'a MrMime_parser.t -> ('a -> 'b MrMime_parser.t) -> 'b MrMime_parser.t
  val ( >>| ) : 'a MrMime_parser.t -> ('a -> 'b) -> 'b MrMime_parser.t
  val ( <|> ) :
    'a MrMime_parser.t -> 'a MrMime_parser.t -> 'a MrMime_parser.t
  val ( <$> ) : ('a -> 'b) -> 'a MrMime_parser.t -> 'b MrMime_parser.t
  val ( <* ) : 'a MrMime_parser.t -> 'b MrMime_parser.t -> 'a MrMime_parser.t
  val ( *> ) : 'a MrMime_parser.t -> 'b MrMime_parser.t -> 'b MrMime_parser.t
  val ( <*> ) :
    ('a -> 'b) MrMime_parser.t -> 'a MrMime_parser.t -> 'b MrMime_parser.t
  val fix : ('a MrMime_parser.t -> 'a MrMime_parser.t) -> 'a MrMime_parser.t
  val lift : ('a -> 'b) -> 'a MrMime_parser.t -> 'b MrMime_parser.t
  val lift2 :
    ('a -> 'b -> 'c) ->
    'a MrMime_parser.t -> 'b MrMime_parser.t -> 'c MrMime_parser.t
  val lift3 :
    ('a -> 'b -> 'c -> 'd) ->
    'a MrMime_parser.t ->
    'b MrMime_parser.t -> 'c MrMime_parser.t -> 'd MrMime_parser.t
  val run :
    'input MrMime_parser.Input.t ->
    'a MrMime_parser.t -> ('a, 'input) MrMime_parser.state
  val only :
    'input MrMime_parser.Input.t ->
    'a MrMime_parser.t -> ('a, 'input) MrMime_parser.state
  type err += Satisfy
  type err += String
  type err += Repeat
  val peek_chr : char option MrMime_parser.t
  val peek_chr_exn : char MrMime_parser.t
  val advance : int -> unit MrMime_parser.t
  val satisfy : (char -> bool) -> char MrMime_parser.t
  val string : (string -> string) -> string -> string MrMime_parser.t
  val store : Buffer.t -> (char -> bool) -> int MrMime_parser.t
  val recognize : (char -> bool) -> string MrMime_parser.t
  val char : char -> char MrMime_parser.t
  val many : 'a MrMime_parser.t -> 'a list MrMime_parser.t
  val one : 'a MrMime_parser.t -> 'a list MrMime_parser.t
  val option : 'a -> 'a MrMime_parser.t -> 'a MrMime_parser.t
  val take : int -> string MrMime_parser.t
  val list : 'a MrMime_parser.t list -> 'a list MrMime_parser.t
  val count : int -> 'a MrMime_parser.t -> 'a list MrMime_parser.t
  val repeat :
    int option -> int option -> (char -> bool) -> string MrMime_parser.t
end