sig
  class cursor :
    int ->
    object ('a)
      val position_ : int
      method advance : char -> 'a
      method error : int -> (char * 'a) Cf_seq.t -> unit
      method position : int
    end
  type expr_t
  type ('a, 'b) rule_t constraint 'a = #Cf_lexer.cursor
  type ('a, 'b) t = ('a, char, 'b) Cf_parser.X.t
    constraint 'a = #Cf_lexer.cursor
  module Op :
    sig
      val ( !: ) : char -> Cf_lexer.expr_t
      val ( !^ ) : (char -> bool) -> Cf_lexer.expr_t
      val ( !~ ) : char Cf_seq.t -> Cf_lexer.expr_t
      val ( !$ ) : string -> Cf_lexer.expr_t
      val ( $| ) : Cf_lexer.expr_t -> Cf_lexer.expr_t -> Cf_lexer.expr_t
      val ( $& ) : Cf_lexer.expr_t -> Cf_lexer.expr_t -> Cf_lexer.expr_t
      val ( !* ) : Cf_lexer.expr_t -> Cf_lexer.expr_t
      val ( !+ ) : Cf_lexer.expr_t -> Cf_lexer.expr_t
      val ( !? ) : Cf_lexer.expr_t -> Cf_lexer.expr_t
      val ( $= ) :
        Cf_lexer.expr_t -> '-> (#Cf_lexer.cursor, 'a) Cf_lexer.rule_t
      val ( $> ) :
        Cf_lexer.expr_t ->
        (char Cf_seq.t -> 'a) -> (#Cf_lexer.cursor, 'a) Cf_lexer.rule_t
      val ( $^ ) :
        Cf_lexer.expr_t ->
        (string -> 'a) -> (#Cf_lexer.cursor, 'a) Cf_lexer.rule_t
      val ( $@ ) :
        Cf_lexer.expr_t ->
        (int -> (#Cf_lexer.cursor as 'a, 'b) Cf_lexer.t) ->
        ('a, 'b) Cf_lexer.rule_t
      val ( !@ ) :
        (#Cf_lexer.cursor as 'a, 'b) Cf_lexer.rule_t list ->
        ('a, 'b) Cf_lexer.rule_t
    end
  val nil : Cf_lexer.expr_t
  val create :
    (#Cf_lexer.cursor as 'a, 'b) Cf_lexer.rule_t -> ('a, 'b) Cf_lexer.t
  type counter_t = { c_pos : int; c_row : int; c_col : int; }
  val counter_zero : Cf_lexer.counter_t
  class line_cursor :
    ?c:Cf_lexer.counter_t ->
    string ->
    object ('a)
      val col_ : int
      val nl0_ : char list
      val nlz_ : char list
      val position_ : int
      val row_ : int
      method advance : char -> 'a
      method col : int
      method counter : Cf_lexer.counter_t
      method error : int -> (char * 'a) Cf_seq.t -> unit
      method private next : char -> int * int * char list
      method position : int
      method row : int
    end
  exception Error of Cf_lexer.counter_t
  val raise_exn : int -> (char * #Cf_lexer.line_cursor) Cf_seq.t -> exn
end