sig   module Host :     sig       type t = Ketrew_pure.Host.t       val parse : string -> Ketrew.EDSL.Host.t       val tmp_on_localhost : Ketrew.EDSL.Host.t       val ssh :         ?add_ssh_options:string list ->         ?playground:string ->         ?port:int ->         ?user:string -> ?name:string -> string -> Ketrew.EDSL.Host.t       val cmdliner_term :         ?doc:string ->         [ `Flag of string list | `Required of int ] ->         Ketrew.EDSL.Host.t Cmdliner.Term.t     end   module Program :     sig       type t = Ketrew_pure.Program.t       val sh : string -> Ketrew.EDSL.Program.t       val shf :         ('a, unit, string, Ketrew.EDSL.Program.t) Pervasives.format4 -> 'a       val exec : string list -> Ketrew.EDSL.Program.t       val ( && ) :         Ketrew.EDSL.Program.t ->         Ketrew.EDSL.Program.t -> Ketrew.EDSL.Program.t       val chain : Ketrew.EDSL.Program.t list -> Ketrew.EDSL.Program.t     end   module Condition :     sig       type t = Ketrew_pure.Target.Condition.t       val ( && ) :         Ketrew.EDSL.Condition.t ->         Ketrew.EDSL.Condition.t -> Ketrew.EDSL.Condition.t       val chain_and : Ketrew.EDSL.Condition.t list -> Ketrew.EDSL.Condition.t       val program :         ?returns:int ->         ?host:Ketrew.EDSL.Host.t ->         Ketrew.EDSL.Program.t -> Ketrew.EDSL.Condition.t       module Volume :         sig           type t = Ketrew_pure.Target.Volume.t           type structure = Ketrew_pure.Target.Volume.structure           val create :             host:Ketrew.EDSL.Host.t ->             root:string ->             Ketrew.EDSL.Condition.Volume.structure ->             Ketrew.EDSL.Condition.Volume.t           val file : string -> Ketrew.EDSL.Condition.Volume.structure           val dir :             string ->             Ketrew.EDSL.Condition.Volume.structure list ->             Ketrew.EDSL.Condition.Volume.structure         end       val volume_exists :         Ketrew.EDSL.Condition.Volume.t -> Ketrew.EDSL.Condition.t       val volume_size_greater_of_equal :         Ketrew.EDSL.Condition.Volume.t -> int -> Ketrew.EDSL.Condition.t     end   module Build_process : sig type t = Ketrew_pure.Target.Build_process.t end   val daemonize :     ?starting_timeout:float ->     ?call_script:(string -> string list) ->     ?using:[ `Nohup_setsid | `Python_daemon ] ->     ?host:Ketrew.EDSL.Host.t ->     ?no_log_is_ok:bool ->     Ketrew.EDSL.Program.t -> Ketrew.EDSL.Build_process.t   val lsf :     ?host:Ketrew.EDSL.Host.t ->     ?queue:string ->     ?name:string ->     ?wall_limit:string ->     ?processors:[ `Min of int | `Min_max of int * int ] ->     ?project:string ->     ?request_memory:[ `GB of int | `MB of int ] ->     ?raw_options:string list ->     Ketrew.EDSL.Program.t -> Ketrew.EDSL.Build_process.t   val pbs :     ?host:Ketrew.EDSL.Host.t ->     ?queue:string ->     ?name:string ->     ?wall_limit:[ `Hours of float ] ->     ?processors:int ->     ?email_user:[ `Always of string | `Never ] ->     ?shell:string -> Ketrew.EDSL.Program.t -> Ketrew.EDSL.Build_process.t   val yarn_application :     ?host:Ketrew.EDSL.Host.t ->     ?daemonize_using:[ `Nohup_setsid | `Python_daemon ] ->     ?daemon_start_timeout:float ->     Ketrew.EDSL.Program.t -> Ketrew.EDSL.Build_process.t   val yarn_distributed_shell :     ?host:Ketrew.EDSL.Host.t ->     ?daemonize_using:[ `Nohup_setsid | `Python_daemon ] ->     ?daemon_start_timeout:float ->     ?hadoop_bin:string ->     ?distributed_shell_shell_jar:string ->     ?container_vcores:int ->     container_memory:[ `GB of int | `MB of int | `Raw of string ] ->     timeout:[ `Raw of string | `Seconds of int ] ->     application_name:string ->     Ketrew.EDSL.Program.t -> Ketrew.EDSL.Build_process.t   module Internal_representation :     sig       type t =           < activate : unit; add_recursive_tags : string list -> unit;             add_tags : string list -> unit;             depends_on : Ketrew.EDSL.Internal_representation.t list;             get_recursive_tags : string list;             id : Ketrew_pure.Internal_pervasives.Unique_id.t; name :              string;             on_failure_activate : Ketrew.EDSL.Internal_representation.t list;             on_success_activate : Ketrew.EDSL.Internal_representation.t list;             render : Ketrew_pure.Target.t >     end   type 'a product = 'a     constraint 'a = < is_done : Ketrew.EDSL.Condition.t option; .. >   type 'a workflow_node =       < product : 'Ketrew.EDSL.product;         render : Ketrew.EDSL.Internal_representation.t >     constraint 'a = < is_done : Ketrew.EDSL.Condition.t option; .. >   type workflow_edge   val depends_on :     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> Ketrew.EDSL.workflow_edge   val on_success_activate :     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> Ketrew.EDSL.workflow_edge   val on_failure_activate :     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> Ketrew.EDSL.workflow_edge   type ensures_option =       [ `Is_verified of Ketrew.EDSL.Condition.t | `Nothing | `Product_is_done ]   val workflow_node :     ?name:string ->     ?active:bool ->     ?make:Ketrew.EDSL.Build_process.t ->     ?ensures:Ketrew.EDSL.ensures_option ->     ?metadata:[ `String of string ] ->     ?equivalence:Ketrew_pure.Target.Equivalence.t ->     ?tags:string list ->     ?edges:Ketrew.EDSL.workflow_edge list ->     (< is_done : Ketrew.EDSL.Condition.t option; .. > as 'a)     Ketrew.EDSL.product -> 'Ketrew.EDSL.workflow_node   type not_already_done = < is_done : Ketrew.EDSL.Condition.t option >   val without_product : Ketrew.EDSL.not_already_done   type single_file =       < exists : Ketrew_pure.Target.Condition.t; host : Ketrew.EDSL.Host.t;         is_bigger_than : int -> Ketrew_pure.Target.Condition.t;         is_done : Ketrew_pure.Target.Condition.t option; path : string >   val single_file :     ?host:Ketrew.EDSL.Host.t ->     string -> Ketrew.EDSL.single_file Ketrew.EDSL.product   type list_of_files =       < is_done : Ketrew_pure.Target.Condition.t option;         paths : string list >   val list_of_files :     ?host:Ketrew.EDSL.Host.t ->     string list -> Ketrew.EDSL.list_of_files Ketrew.EDSL.product   type unknown_product = < is_done : Ketrew.EDSL.Condition.t option >   val forget_product :     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node ->     Ketrew.EDSL.unknown_product Ketrew.EDSL.workflow_node   val workflow_to_string :     ?ansi_colors:bool ->     ?indentation:int ->     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> string   val add_tags :     ?recursive:bool ->     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> string list -> unit   val node_id :     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> string   val node_name :     < is_done : Ketrew.EDSL.Condition.t option; .. >     Ketrew.EDSL.workflow_node -> string   class type user_artifact =     object       method exists : Ketrew_pure.Target.Condition.t       method is_bigger_than : int -> Ketrew_pure.Target.Condition.t       method path : string     end   val file : ?host:Ketrew.EDSL.Host.t -> string -> Ketrew.EDSL.user_artifact   val unit : Ketrew.EDSL.user_artifact   class type user_target =     object       method activate : unit       method add_recursive_tags : string list -> unit       method add_tags : string list -> unit       method depends_on : Ketrew.EDSL.user_target list       method get_recursive_tags : string list       method id : Ketrew_pure.Internal_pervasives.Unique_id.t       method is_active : bool       method metadata : [ `String of string ] option       method name : string       method on_failure_activate : Ketrew.EDSL.user_target list       method on_success_activate : Ketrew.EDSL.user_target list       method product : Ketrew.EDSL.user_artifact       method render : Ketrew_pure.Target.t     end   val target :     ?active:bool ->     ?depends_on:Ketrew.EDSL.user_target list ->     ?make:Ketrew.EDSL.Build_process.t ->     ?done_when:Ketrew_pure.Target.Condition.t ->     ?metadata:[ `String of string ] ->     ?product:Ketrew.EDSL.user_artifact ->     ?equivalence:Ketrew_pure.Target.Equivalence.t ->     ?on_failure_activate:Ketrew.EDSL.user_target list ->     ?on_success_activate:Ketrew.EDSL.user_target list ->     ?tags:string list -> string -> Ketrew.EDSL.user_target   val file_target :     ?depends_on:Ketrew.EDSL.user_target list ->     ?make:Ketrew.EDSL.Build_process.t ->     ?metadata:[ `String of string ] ->     ?name:string ->     ?host:Ketrew.EDSL.Host.t ->     ?equivalence:Ketrew_pure.Target.Equivalence.t ->     ?on_failure_activate:Ketrew.EDSL.user_target list ->     ?on_success_activate:Ketrew.EDSL.user_target list ->     ?tags:string list -> string -> Ketrew.EDSL.user_target   val to_display_string :     ?ansi_colors:bool ->     ?indentation:int -> Ketrew.EDSL.user_target -> string end