sig
  type box = {
    id : string;
    name : string;
    attributes : (string * string) list;
  }
  type arrow = {
    label : string;
    points_to : Biokepi_pipeline_edsl.To_dot.Tree.t;
  }
  and t =
      [ `Apply of
          string * Biokepi_pipeline_edsl.To_dot.Tree.t *
          Biokepi_pipeline_edsl.To_dot.Tree.t
      | `Input_value of Biokepi_pipeline_edsl.To_dot.Tree.box
      | `Lambda of string * string * Biokepi_pipeline_edsl.To_dot.Tree.t
      | `Node of
          Biokepi_pipeline_edsl.To_dot.Tree.box *
          Biokepi_pipeline_edsl.To_dot.Tree.arrow list
      | `String of string
      | `Variable of string * string ]
  val node_count : int Pervasives.ref
  val id_style : [> `Hash ]
  val make_id : [< `Of of '| `Unique ] -> string
  val arrow :
    string ->
    Biokepi_pipeline_edsl.To_dot.Tree.t ->
    Biokepi_pipeline_edsl.To_dot.Tree.arrow
  val variable : '-> '-> [> `Variable of string * 'b ]
  val lambda : '-> '-> [> `Lambda of string * 'a * 'b ]
  val apply : '-> '-> [> `Apply of string * 'a * 'b ]
  val string : '-> [> `String of 'a ]
  val node :
    ?id:string ->
    ?a:(string * string) list ->
    string ->
    Biokepi_pipeline_edsl.To_dot.Tree.arrow list ->
    Biokepi_pipeline_edsl.To_dot.Tree.t
  val input_value :
    ?a:(string * string) list ->
    string -> Biokepi_pipeline_edsl.To_dot.Tree.t
  val to_dot : Biokepi_pipeline_edsl.To_dot.Tree.t -> SmartPrint.t
end