sig
  type 'a state = 'BatParserCo.state = Eof | State of 'a
  type 'a report =
    'BatParserCo.report =
      Report of ('a state * string * 'a report) list
  module Source :
    sig
      type ('a, 'b) t = ('a, 'b) BatParserCo.Source.t
      val get_state : ('a, 'b) t -> 'b state
      val set_full_state : ('a, 'b) t -> '-> ('-> '-> 'c) -> ('a, 'c) t
      val of_enum : 'BatEnum.t -> '-> ('-> '-> 'b) -> ('a, 'b) t
    end
  type ('a, 'b, 'c) t = ('a, 'b, 'c) BatParserCo.t
  val eof : ('a, unit, 'b) t
  val either : ('a, 'b, 'c) t list -> ('a, 'b, 'c) t
  val ( <|> ) : ('a, 'b, 'c) t -> ('a, 'b, 'c) t -> ('a, 'b, 'c) t
  val maybe : ('a, 'b, 'c) t -> ('a, 'b option, 'c) t
  val ( ~? ) : ('a, 'b, 'c) t -> ('a, 'b option, 'c) t
  val bind : ('a, 'b, 'c) t -> ('-> ('a, 'd, 'c) t) -> ('a, 'd, 'c) t
  val ( >>= ) : ('a, 'b, 'c) t -> ('-> ('a, 'd, 'c) t) -> ('a, 'd, 'c) t
  val ( >>> ) : ('a, 'b, 'c) t -> ('a, 'd, 'c) t -> ('a, 'd, 'c) t
  val cons : ('a, 'b, 'c) t -> ('a, 'b list, 'c) t -> ('a, 'b list, 'c) t
  val ( >:: ) : ('a, 'b, 'c) t -> ('a, 'b list, 'c) t -> ('a, 'b list, 'c) t
  val label : string -> ('a, 'b, 'c) t -> ('a, 'b, 'c) t
  val state : ('a, 'b state, 'b) t
  val any : ('a, 'a, 'b) t
  val return : '-> ('b, 'a, 'c) t
  val satisfy : ('-> bool) -> ('a, 'a, 'b) t
  val filter : ('-> bool) -> ('b, 'a, 'c) t -> ('b, 'a, 'c) t
  val suspend :
    ('a, 'b, 'c) t -> ('a, unit -> ('b, 'c report) BatStd.result, 'c) t
  val run :
    ('a, 'b, 'c) t -> ('a, 'c) Source.t -> ('b, 'c report) BatStd.result
  val fail : ('a, 'b, 'c) t
  val fatal : ('a, 'b, 'c) t
  val lookahead : ('a, 'b, 'c) t -> ('a, 'b option, 'c) t
  val exactly : '-> ('a, 'a, 'b) t
  val one_of : 'a list -> ('a, 'a, 'b) t
  val none_of : 'a list -> ('a, 'a, 'b) t
  val range : '-> '-> ('a, 'a, 'b) t
  val zero_plus :
    ?sep:('a, 'b, 'c) t -> ('a, 'd, 'c) t -> ('a, 'd list, 'c) t
  val ignore_zero_plus :
    ?sep:('a, 'b, 'c) t -> ('a, 'd, 'c) t -> ('a, unit, 'c) t
  val ( ~* ) : ('a, 'b, 'c) t -> ('a, 'b list, 'c) t
  val one_plus : ?sep:('a, 'b, 'c) t -> ('a, 'd, 'c) t -> ('a, 'd list, 'c) t
  val ignore_one_plus :
    ?sep:('a, 'b, 'c) t -> ('a, 'd, 'c) t -> ('a, unit, 'c) t
  val ( ~+ ) : ('a, 'b, 'c) t -> ('a, 'b list, 'c) t
  val times : int -> ('a, 'b, 'c) t -> ('a, 'b list, 'c) t
  val ( ^^ ) : ('a, 'b, 'c) t -> int -> ('a, 'b list, 'c) t
  val must : ('a, 'b, 'c) t -> ('a, 'b, 'c) t
  val should : ('a, 'b, 'c) t -> ('a, 'b, 'c) t
  val post_map : ('-> 'b) -> ('c, 'a, 'd) t -> ('c, 'b, 'd) t
  val source_map : ('a, 'b, 'c) t -> ('a, 'c) Source.t -> ('b, 'c) Source.t
  val scan : ('a, 'b, 'c) t -> ('a, 'a list, 'c) t
  val sat : ('-> bool) -> ('a, unit, 'b) t
  val debug_mode : bool ref
end