sig
  type x = Cf_regex.DFA.x
  type 'a r = 'Cf_regex.DFA.r
  type 'a t = (char, 'a) Cf_parser.t
  val nil : Cf_lex.x
  val create : 'Cf_lex.r -> 'Cf_lex.t
  module type Expr_Op_T =
    sig
      val ( $| ) : Cf_lex.x -> Cf_lex.x -> Cf_lex.x
      val ( $& ) : Cf_lex.x -> Cf_lex.x -> Cf_lex.x
      val ( !* ) : Cf_lex.x -> Cf_lex.x
      val ( !+ ) : Cf_lex.x -> Cf_lex.x
      val ( !? ) : Cf_lex.x -> Cf_lex.x
      val ( !: ) : char -> Cf_lex.x
      val ( !^ ) : (char -> bool) -> Cf_lex.x
      val ( !~ ) : char Cf_seq.t -> Cf_lex.x
      val ( !$ ) : string -> Cf_lex.x
    end
  module Op :
    sig
      val ( $| ) : x -> x -> x
      val ( $& ) : x -> x -> x
      val ( !* ) : x -> x
      val ( !+ ) : x -> x
      val ( !? ) : x -> x
      val ( !: ) : char -> x
      val ( !^ ) : (char -> bool) -> x
      val ( !~ ) : char Cf_seq.t -> x
      val ( !$ ) : string -> x
      val ( $= ) : Cf_lex.x -> '-> 'Cf_lex.r
      val ( $> ) : Cf_lex.x -> (string -> 'a) -> 'Cf_lex.r
      val ( $@ ) : Cf_lex.x -> (int -> 'Cf_lex.t) -> 'Cf_lex.r
      val ( !@ ) : 'Cf_lex.r list -> 'Cf_lex.r
      val ( ?~ ) : Cf_lex.x -> string Cf_lex.t
      val ( ?$ ) : string -> string Cf_lex.t
    end
  module X :
    sig
      type ('b, 'a) r constraint 'b = char #Cf_parser.cursor
      type ('b, 'a) t = ('b, char, 'a) Cf_parser.X.t
        constraint 'b = char #Cf_parser.cursor
      val create :
        (char #Cf_parser.cursor as 'b, 'a) Cf_lex.X.r -> ('b, 'a) Cf_lex.X.t
      module Op :
        sig
          val ( $| ) : x -> x -> x
          val ( $& ) : x -> x -> x
          val ( !* ) : x -> x
          val ( !+ ) : x -> x
          val ( !? ) : x -> x
          val ( !: ) : char -> x
          val ( !^ ) : (char -> bool) -> x
          val ( !~ ) : char Cf_seq.t -> x
          val ( !$ ) : string -> x
          val ( $= ) :
            Cf_lex.x -> '-> (char #Cf_parser.cursor, 'a) Cf_lex.X.r
          val ( $> ) :
            Cf_lex.x ->
            (string -> 'a) -> (char #Cf_parser.cursor, 'a) Cf_lex.X.r
          val ( $@ ) :
            Cf_lex.x ->
            (int -> (char #Cf_parser.cursor as 'b, 'a) Cf_lex.X.t) ->
            ('b, 'a) Cf_lex.X.r
          val ( !@ ) :
            (char #Cf_parser.cursor as 'b, 'a) Cf_lex.X.r list ->
            ('b, 'a) Cf_lex.X.r
          val ( ?~ ) :
            Cf_lex.x -> (char #Cf_parser.cursor, string) Cf_lex.X.t
          val ( ?$ ) : string -> (char #Cf_parser.cursor, string) Cf_lex.X.t
        end
    end
  type counter = { c_pos : int; c_row : int; c_col : int; }
  val counter_zero : Cf_lex.counter
  class cursor :
    ?c:Cf_lex.counter ->
    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_lex.counter
      method private next : char -> int * int * char list
      method position : int
      method row : int
    end
end