sig
  type 'a result = [ `Error of string | `Ok of 'a ]
  val ret : '-> 'Assemblage.Cmd.result
  val error : string -> 'Assemblage.Cmd.result
  val bind :
    'Assemblage.Cmd.result ->
    ('-> 'Assemblage.Cmd.result) -> 'Assemblage.Cmd.result
  val map :
    'Assemblage.Cmd.result -> ('-> 'b) -> 'Assemblage.Cmd.result
  val get : 'Assemblage.Cmd.result -> 'a
  val on_error :
    ?level:Assemblage.Log.level -> use:'-> 'Assemblage.Cmd.result -> 'a
  val ignore_error : use:'-> 'Assemblage.Cmd.result -> 'a
  val reword_error :
    ?replace:bool ->
    string -> 'Assemblage.Cmd.result -> 'Assemblage.Cmd.result
  val exn_error :
    ?msg:(Printexc.raw_backtrace -> exn -> '-> string) ->
    ('-> 'b) -> '-> 'Assemblage.Cmd.result
  val ( >>= ) :
    'Assemblage.Cmd.result ->
    ('-> 'Assemblage.Cmd.result) -> 'Assemblage.Cmd.result
  val ( >>| ) :
    'Assemblage.Cmd.result -> ('-> 'b) -> 'Assemblage.Cmd.result
  module Infix :
    sig
      val ( >>= ) :
        'Assemblage.Cmd.result ->
        ('-> 'Assemblage.Cmd.result) -> 'Assemblage.Cmd.result
      val ( >>| ) :
        'Assemblage.Cmd.result -> ('-> 'b) -> 'Assemblage.Cmd.result
    end
  type path = Assemblage.Path.t
  module Path :
    sig
      val exists : Assemblage.Cmd.path -> bool Assemblage.Cmd.result
      val move :
        ?force:bool ->
        Assemblage.Cmd.path ->
        Assemblage.Cmd.path -> unit Assemblage.Cmd.result
    end
  module File :
    sig
      val exists : Assemblage.Cmd.path -> bool Assemblage.Cmd.result
      val dev_null : Assemblage.Cmd.path
      val delete :
        ?maybe:bool -> Assemblage.Cmd.path -> unit Assemblage.Cmd.result
      val temp : string -> Assemblage.Cmd.path Assemblage.Cmd.result
      val with_inf :
        (Pervasives.in_channel -> '-> 'Assemblage.Cmd.result) ->
        Assemblage.Cmd.path -> '-> 'Assemblage.Cmd.result
      val read : Assemblage.Cmd.path -> string Assemblage.Cmd.result
      val read_lines :
        Assemblage.Cmd.path -> string list Assemblage.Cmd.result
      val with_outf :
        (Pervasives.out_channel -> '-> 'Assemblage.Cmd.result) ->
        Assemblage.Cmd.path -> '-> 'Assemblage.Cmd.result
      val write : Assemblage.Cmd.path -> string -> unit Assemblage.Cmd.result
      val write_lines :
        Assemblage.Cmd.path -> string list -> unit Assemblage.Cmd.result
      val write_subst :
        (string * string) list ->
        Assemblage.Cmd.path -> string -> unit Assemblage.Cmd.result
    end
  module Dir :
    sig
      val exists : Assemblage.Cmd.path -> bool Assemblage.Cmd.result
      val getcwd : unit -> Assemblage.Cmd.path Assemblage.Cmd.result
      val chdir : Assemblage.Cmd.path -> unit Assemblage.Cmd.result
      val fold_files_rec :
        ?skip:string list ->
        (string -> '-> 'Assemblage.Cmd.result) ->
        '-> string list -> 'Assemblage.Cmd.result
    end
  module Vcs :
    sig
      type t = [ `Git | `Hg ]
      val exists :
        Assemblage.Cmd.path ->
        Assemblage.Cmd.Vcs.t -> bool Assemblage.Cmd.result
      val find :
        Assemblage.Cmd.path ->
        Assemblage.Cmd.Vcs.t option Assemblage.Cmd.result
      val get :
        Assemblage.Cmd.path -> Assemblage.Cmd.Vcs.t Assemblage.Cmd.result
      val head :
        ?dirty:bool ->
        Assemblage.Cmd.path ->
        Assemblage.Cmd.Vcs.t -> string Assemblage.Cmd.result
      val describe :
        ?dirty:bool ->
        Assemblage.Cmd.path ->
        Assemblage.Cmd.Vcs.t -> string Assemblage.Cmd.result
    end
  val env : string -> string option
  val get_env : string -> string Assemblage.Cmd.result
  val exists : string -> bool Assemblage.Cmd.result
  val exec_ret : string -> string list -> int
  val exec : string -> string list -> unit Assemblage.Cmd.result
  val read :
    ?trim:bool -> string -> string list -> string Assemblage.Cmd.result
  val read_lines : string -> string list -> string list Assemblage.Cmd.result
  val write :
    string ->
    string list -> Assemblage.Cmd.path -> unit Assemblage.Cmd.result
end