sig
  type ('a, 'b, 'c) t =
      ('b * 'a) Cf_seq.t -> ('c * ('b * 'a) Cf_seq.t) option
    constraint 'a = 'd #Cf_parser.cursor
  exception Error of int
  val err :
    ?f:(('a * ('c #Cf_parser.cursor as 'b)) Cf_seq.t -> exn) ->
    unit -> ('b, 'a, 'd) Cf_parser.X.t
  val req :
    ?f:(('a * ('c #Cf_parser.cursor as 'b)) Cf_seq.t -> exn) ->
    ('b, 'a, 'd) Cf_parser.X.t -> ('b, 'a, 'd) Cf_parser.X.t
  val sat : ('a -> bool) -> ('b #Cf_parser.cursor, 'a, 'a) Cf_parser.X.t
  val tok : ('a -> 'b option) -> ('c #Cf_parser.cursor, 'a, 'b) Cf_parser.X.t
  val lit : string -> 'a -> ('b #Cf_parser.cursor, char, 'a) Cf_parser.X.t
  val weave :
    c:('b #Cf_parser.cursor as 'a) -> 'b Cf_seq.t -> ('b * 'a) Cf_seq.t
  val unfold :
    ('b #Cf_parser.cursor as 'a, 'c, 'd) Cf_parser.X.t ->
    ('c * 'a) Cf_seq.t -> ('d * 'a) Cf_seq.t
end