functor (Shtream : SHTREAM->
  sig
    type 'a t constraint 'a = '-> 'c
    type 'a elem = 'Shtream.elem
    type initial = Shtream.initial
    type 'a shtream = 'Shtream.t
    type 'a coshtream = 'Shtream.co_t
    type procref = Channel.procref
    type text = initial elem
    val ( -| ) : ('-> 'b) t -> ('-> 'c) t -> ('-> 'c) t
    val pipe : ('-> 'b) t -> ('-> 'c) t -> ('-> 'c) t
    val from_file : string -> ('-> text) t
    val from_null : ('-> text) t
    val from_gen : Channel.dup_in_source -> ('-> text) t
    val from_shtream : 'a shtream -> ('-> 'a) t
    val to_file :
      ?clobber:Channel.clobber_spec -> string -> ('a elem -> 'b) t
    val to_null : ('a elem -> 'b) t
    val to_stderr : ('a elem -> 'b) t
    val to_gen : Channel.dup_out_source -> ('a elem -> 'b) t
    val to_coshtream : 'a coshtream -> ('-> 'b) t
    val command : string -> ('a elem -> text) t
    val program :
      ?path:bool ->
      string -> ?argv0:string -> string list -> ('a elem -> text) t
    val thunk : (unit -> unit) -> ('a elem -> text) t
    val sed : ('-> 'b) -> ('-> 'b) t
    val grep : ('-> bool) -> ('-> 'a) t
    val trans : ('a shtream -> 'b shtream) -> ('-> 'b) t
    val sed_string : (string -> 'a) -> ('b elem -> 'a) t
    val grep_string : (string -> bool) -> ('a elem -> 'a elem) t
    val ( /</ ) : (text -> 'a) t -> Channel.dup_spec -> (text -> 'a) t
    val redirect_in : Channel.dup_spec -> (text -> 'a) t -> (text -> 'a) t
    val ( />/ ) : ('-> 'b elem) t -> Channel.dup_spec -> ('-> 'b elem) t
    val redirect_out :
      Channel.dup_spec -> ('-> 'b elem) t -> ('-> 'b elem) t
    val ( ^>>= ) :
      ('-> 'b) t -> (Proc.status -> ('-> 'b) t) -> ('-> 'b) t
    val seq : ('-> 'b) t -> (Proc.status -> ('-> 'b) t) -> ('-> 'b) t
    val ( ^>> ) : ('-> 'b) t -> ('-> 'b) t -> ('-> 'b) t
    val ( &&^ ) : ('-> 'b) t -> ('-> 'b) t -> ('-> 'b) t
    val ( ||^ ) : ('-> 'b) t -> ('-> 'b) t -> ('-> 'b) t
    val ( ~>> ) : ('-> 'b) t list -> ('-> 'b) t
    val ( ~&& ) : ('-> 'b) t list -> ('-> 'b) t
    val ( ~|| ) : ('-> 'b) t list -> ('-> 'b) t
    val commands : string list -> (text -> text) t
    val yield : Proc.status -> ('-> 'b) t
    val caml : (unit -> ('-> 'b) t) -> ('-> 'b) t
    val ( ^&= ) :
      (text -> 'a elem) t -> (Proc.t -> ('-> 'c) t) -> ('-> 'c) t
    val par : (text -> 'a elem) t -> (Proc.t -> ('-> 'c) t) -> ('-> 'c) t
    val ( ^& ) : (text -> 'a elem) t -> ('-> 'c) t -> ('-> 'c) t
    val run_source : (text -> 'a) t -> 'a shtream
    val run_sink : ('-> 'b elem) t -> 'a coshtream
    val run_list : (text -> 'a) t -> 'a list
    val run_shtream : ('-> 'b) t -> 'a shtream -> 'b shtream
    val run_in : ?procref:procref -> (text -> 'a elem) t -> in_channel
    val run_out : ?procref:procref -> (text -> 'a elem) t -> out_channel
    val run_backquote : ?procref:procref -> (text -> 'a elem) t -> string
    val run_bg : (text -> 'a elem) t -> Proc.t
    val run : (text -> 'a elem) t -> Proc.status
    val string_of_elem : 'a elem -> string
    val elem_of_string : string -> text
    val int_of_elem : 'a elem -> int
    val elem_of_int : int -> text
    val char_of_elem : 'a elem -> char
    val elem_of_char : char -> text
    val float_of_elem : 'a elem -> float
    val elem_of_float : float -> text
    val bool_of_elem : 'a elem -> bool
    val elem_of_bool : bool -> text
  end