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