sig
  type 'a t constraint 'a = 'b -> 'c
  type 'a elem = 'a LineShtream.elem
  type initial = LineShtream.initial
  type 'a shtream = 'a LineShtream.t
  type 'a coshtream = 'a LineShtream.co_t
  type procref = Channel.procref
  type text = initial elem
  val ( -| ) : ('a -> 'b) t -> ('b -> 'c) t -> ('a -> 'c) t
  val pipe : ('i -> 'm) t -> ('m -> 'o) t -> ('i -> 'o) t
  val from_file : string -> ('i -> text) t
  val from_null : ('i -> text) t
  val from_gen : Channel.dup_in_source -> ('i -> text) t
  val from_shtream : 'o shtream -> ('i -> 'o) t
  val to_file : ?clobber:Channel.clobber_spec -> string -> ('i elem -> 'o) t
  val to_null : ('i elem -> 'o) t
  val to_stderr : ('i elem -> 'o) t
  val to_gen : Channel.dup_out_source -> ('i elem -> 'o) t
  val to_coshtream : 'i coshtream -> ('i -> 'o) t
  val command : string -> ('i elem -> text) t
  val program :
    ?path:bool ->
    string -> ?argv0:string -> string list -> ('i elem -> text) t
  val thunk : (unit -> unit) -> ('i elem -> text) t
  val sed : ('i -> 'o) -> ('i -> 'o) t
  val grep : ('i -> bool) -> ('i -> 'i) t
  val trans : ('i shtream -> 'o shtream) -> ('i -> 'o) t
  val sed_string : (string -> 'o) -> ('i elem -> 'o) t
  val grep_string : (string -> bool) -> ('i elem -> 'i elem) t
  val ( /</ ) : (text -> 'o) t -> Channel.dup_spec -> (text -> 'o) t
  val redirect_in : Channel.dup_spec -> (text -> 'o) t -> (text -> 'o) t
  val ( />/ ) : ('i -> 'o elem) t -> Channel.dup_spec -> ('i -> 'o elem) t
  val redirect_out :
    Channel.dup_spec -> ('i -> 'o elem) t -> ('i -> 'o elem) t
  val ( ^>>= ) :
    ('i -> 'o) t -> (Proc.status -> ('i -> 'o) t) -> ('i -> 'o) t
  val seq : ('i -> 'o) t -> (Proc.status -> ('i -> 'o) t) -> ('i -> 'o) t
  val ( ^>> ) : ('i -> 'o) t -> ('i -> 'o) t -> ('i -> 'o) t
  val ( &&^ ) : ('i -> 'o) t -> ('i -> 'o) t -> ('i -> 'o) t
  val ( ||^ ) : ('i -> 'o) t -> ('i -> 'o) t -> ('i -> 'o) t
  val ( ~>> ) : ('i -> 'o) t list -> ('i -> 'o) t
  val ( ~&& ) : ('i -> 'o) t list -> ('i -> 'o) t
  val ( ~|| ) : ('i -> 'o) t list -> ('i -> 'o) t
  val commands : string list -> (text -> text) t
  val yield : Proc.status -> ('i -> 'o) t
  val caml : (unit -> ('i -> 'o) t) -> ('i -> 'o) t
  val ( ^&= ) :
    (text -> 'b elem) t -> (Proc.t -> ('i -> 'o) t) -> ('i -> 'o) t
  val par : (text -> 'b elem) t -> (Proc.t -> ('i -> 'o) t) -> ('i -> 'o) t
  val ( ^& ) : (text -> 'b elem) t -> ('i -> 'o) t -> ('i -> 'o) t
  val run_source : (text -> 'o) t -> 'o shtream
  val run_sink : ('i -> 'o elem) t -> 'i coshtream
  val run_list : (text -> 'o) t -> 'o list
  val run_shtream : ('i -> 'o) t -> 'i shtream -> 'o shtream
  val run_in : ?procref:procref -> (text -> 'o elem) t -> in_channel
  val run_out : ?procref:procref -> (text -> 'o elem) t -> out_channel
  val run_backquote : ?procref:procref -> (text -> 'o elem) t -> string
  val run_bg : (text -> 'o elem) t -> Proc.t
  val run : (text -> 'o 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
  module Make :
    functor (Shtream : AnyShtream.S) ->
      sig
        type 'a t constraint 'a = 'b -> 'c
        type 'a elem = 'a Shtream.elem
        type initial = Shtream.initial
        type 'a shtream = 'a Shtream.t
        type 'a coshtream = 'a Shtream.co_t
        type procref = Channel.procref
        type text = initial elem
        val ( -| ) : ('a -> 'b) t -> ('b -> 'c) t -> ('a -> 'c) t
        val pipe : ('i -> 'm) t -> ('m -> 'o) t -> ('i -> 'o) t
        val from_file : string -> ('i -> text) t
        val from_null : ('i -> text) t
        val from_gen : Channel.dup_in_source -> ('i -> text) t
        val from_shtream : 'o shtream -> ('i -> 'o) t
        val to_file :
          ?clobber:Channel.clobber_spec -> string -> ('i elem -> 'o) t
        val to_null : ('i elem -> 'o) t
        val to_stderr : ('i elem -> 'o) t
        val to_gen : Channel.dup_out_source -> ('i elem -> 'o) t
        val to_coshtream : 'i coshtream -> ('i -> 'o) t
        val command : string -> ('i elem -> text) t
        val program :
          ?path:bool ->
          string -> ?argv0:string -> string list -> ('i elem -> text) t
        val thunk : (unit -> unit) -> ('i elem -> text) t
        val sed : ('i -> 'o) -> ('i -> 'o) t
        val grep : ('i -> bool) -> ('i -> 'i) t
        val trans : ('i shtream -> 'o shtream) -> ('i -> 'o) t
        val sed_string : (string -> 'o) -> ('i elem -> 'o) t
        val grep_string : (string -> bool) -> ('i elem -> 'i elem) t
        val ( /</ ) : (text -> 'o) t -> Channel.dup_spec -> (text -> 'o) t
        val redirect_in :
          Channel.dup_spec -> (text -> 'o) t -> (text -> 'o) t
        val ( />/ ) :
          ('i -> 'o elem) t -> Channel.dup_spec -> ('i -> 'o elem) t
        val redirect_out :
          Channel.dup_spec -> ('i -> 'o elem) t -> ('i -> 'o elem) t
        val ( ^>>= ) :
          ('i -> 'o) t -> (Proc.status -> ('i -> 'o) t) -> ('i -> 'o) t
        val seq :
          ('i -> 'o) t -> (Proc.status -> ('i -> 'o) t) -> ('i -> 'o) t
        val ( ^>> ) : ('i -> 'o) t -> ('i -> 'o) t -> ('i -> 'o) t
        val ( &&^ ) : ('i -> 'o) t -> ('i -> 'o) t -> ('i -> 'o) t
        val ( ||^ ) : ('i -> 'o) t -> ('i -> 'o) t -> ('i -> 'o) t
        val ( ~>> ) : ('i -> 'o) t list -> ('i -> 'o) t
        val ( ~&& ) : ('i -> 'o) t list -> ('i -> 'o) t
        val ( ~|| ) : ('i -> 'o) t list -> ('i -> 'o) t
        val commands : string list -> (text -> text) t
        val yield : Proc.status -> ('i -> 'o) t
        val caml : (unit -> ('i -> 'o) t) -> ('i -> 'o) t
        val ( ^&= ) :
          (text -> 'b elem) t -> (Proc.t -> ('i -> 'o) t) -> ('i -> 'o) t
        val par :
          (text -> 'b elem) t -> (Proc.t -> ('i -> 'o) t) -> ('i -> 'o) t
        val ( ^& ) : (text -> 'b elem) t -> ('i -> 'o) t -> ('i -> 'o) t
        val run_source : (text -> 'o) t -> 'o shtream
        val run_sink : ('i -> 'o elem) t -> 'i coshtream
        val run_list : (text -> 'o) t -> 'o list
        val run_shtream : ('i -> 'o) t -> 'i shtream -> 'o shtream
        val run_in : ?procref:procref -> (text -> 'o elem) t -> in_channel
        val run_out : ?procref:procref -> (text -> 'o elem) t -> out_channel
        val run_backquote : ?procref:procref -> (text -> 'o elem) t -> string
        val run_bg : (text -> 'o elem) t -> Proc.t
        val run : (text -> 'o 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
end