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