functor (S : Symbol_T->
  sig
    module S :
      sig
        type t = S.t
        type 'a map = 'S.map
        val map : (t -> 'a) -> 'a map
        val get : 'a map -> t -> 'a
      end
    type x
    type 'a r
    type 'a t = (S.t, 'a) Cf_parser.t
    val nil : x
    module type Expr_Op_T =
      sig
        val ( $| ) : x -> x -> x
        val ( $& ) : x -> x -> x
        val ( !* ) : x -> x
        val ( !+ ) : x -> x
        val ( !? ) : x -> x
        val ( !: ) : S.t -> x
        val ( !^ ) : (S.t -> bool) -> x
        val ( !~ ) : S.t Cf_seq.t -> x
      end
    module Expr_Op : Expr_Op_T
    module type Op_T =
      sig
        val ( $| ) : x -> x -> x
        val ( $& ) : x -> x -> x
        val ( !* ) : x -> x
        val ( !+ ) : x -> x
        val ( !? ) : x -> x
        val ( !: ) : S.t -> x
        val ( !^ ) : (S.t -> bool) -> x
        val ( !~ ) : S.t Cf_seq.t -> x
        val ( $= ) : x -> '-> 'a r
        val ( $> ) : x -> (S.t Cf_seq.t -> 'a) -> 'a r
        val ( $@ ) : x -> (int -> 'a t) -> 'a r
        val ( !@ ) : 'a r list -> 'a r
      end
    module Op : Op_T
    val create : 'a r -> 'a t
    module X :
      sig
        type ('a, 'b) r constraint 'a = S.t #Cf_parser.cursor
        type ('a, 'b) t = ('a, S.t, 'b) Cf_parser.X.t
          constraint 'a = S.t #Cf_parser.cursor
        module type Op_T =
          sig
            val ( $| ) : x -> x -> x
            val ( $& ) : x -> x -> x
            val ( !* ) : x -> x
            val ( !+ ) : x -> x
            val ( !? ) : x -> x
            val ( !: ) : S.t -> x
            val ( !^ ) : (S.t -> bool) -> x
            val ( !~ ) : S.t Cf_seq.t -> x
            val ( $= ) : x -> '-> (S.t #Cf_parser.cursor, 'a) r
            val ( $> ) :
              x -> (S.t Cf_seq.t -> 'a) -> (S.t #Cf_parser.cursor, 'a) r
            val ( $@ ) :
              x -> (int -> (S.t #Cf_parser.cursor as 'a, 'b) t) -> ('a, 'b) r
            val ( !@ ) :
              (S.t #Cf_parser.cursor as 'a, 'b) r list -> ('a, 'b) r
          end
        module Op : Op_T
        val create : (S.t #Cf_parser.cursor as 'a, 'b) r -> ('a, 'b) t
      end
  end