sig
  exception Dferror of string
  type dfsink_kind = DFSerialize | DFControl
  type dfpass_kind = DFOrdered of int | DFUnordered | DFMerge | DFImmediate
  type dfnode_kind =
      DFSink of Df_struct.dfsink_kind
    | DFPass of Df_struct.dfpass_kind
    | DFFork
  type dfnode_id
  type ('a, 'b) dfnode
  type ('a, 'b) dfgraph =
      ('a, 'b) Df_struct.dfnode list * ('a, 'b) Df_struct.dfnode
  val mkdfnode_dfsink :
    Df_struct.dfsink_kind -> '-> ('a, 'b) Df_struct.dfnode
  val mkdfnode_dfpass :
    Df_struct.dfpass_kind -> '-> ('a, 'b) Df_struct.dfnode
  val mkdfnode_dffork : '-> ('a, 'b) Df_struct.dfnode
  val mkdfgraph_empty : unit -> ('a, 'b) Df_struct.dfgraph
  val mkdfgraph_singleton :
    ('a, 'b) Df_struct.dfnode -> ('a, 'b) Df_struct.dfgraph
  val get_dfnode_value : ('a, 'b) Df_struct.dfnode -> 'a
  val get_dfnode_kind : ('a, 'b) Df_struct.dfnode -> Df_struct.dfnode_kind
  val get_dfnode_id : ('a, 'b) Df_struct.dfnode -> Df_struct.dfnode_id
  val is_dfsink : Df_struct.dfsink_kind -> ('a, 'b) Df_struct.dfnode -> bool
  val is_dfpass : Df_struct.dfpass_kind -> ('a, 'b) Df_struct.dfnode -> bool
  val is_dffork : ('a, 'b) Df_struct.dfnode -> bool
  val affiliate_unary : ('a, 'b) Df_struct.dfnode -> unit
  val affiliate_binary :
    ('a, 'b) Df_struct.dfnode -> ('a, 'b) Df_struct.dfnode -> unit
  val affiliate_many : ('a, 'b) Df_struct.dfnode list -> unit
  val get_affiliates :
    ('a, 'b) Df_struct.dfnode -> ('a, 'b) Df_struct.dfnode list
  val terminate_unary :
    ('a, 'b) Df_struct.dfnode ->
    ('a, 'b) Df_struct.dfgraph -> ('a, 'b) Df_struct.dfgraph
  val terminate_binary :
    ('a, 'b) Df_struct.dfnode ->
    ('a, 'b) Df_struct.dfgraph ->
    ('a, 'b) Df_struct.dfgraph -> ('a, 'b) Df_struct.dfgraph
  val terminate_many :
    ('a, 'b) Df_struct.dfnode ->
    ('a, 'b) Df_struct.dfgraph list -> ('a, 'b) Df_struct.dfgraph
  val merge_dfgraphs :
    ('a, 'b) Df_struct.dfgraph ->
    ('a, 'b) Df_struct.dfgraph -> ('a, 'b) Df_struct.dfgraph
  val iter_dfs :
    (('a, 'b) Df_struct.dfnode -> '-> 'b) ->
    '-> ('a, 'b) Df_struct.dfgraph -> unit
  val fold_left_dfs :
    ('a list -> ('b, 'a) Df_struct.dfnode -> '-> 'a) ->
    (('b, 'a) Df_struct.dfnode -> '-> 'c) ->
    '-> '-> ('b, 'a) Df_struct.dfnode -> 'a
  val find_all :
    (('a, 'b) Df_struct.dfnode -> bool) ->
    ('a, 'b) Df_struct.dfgraph -> ('a, 'b) Df_struct.dfnode list
  val string_of_dfnode_id : Df_struct.dfnode_id -> string
  val print_dot_dfgraph :
    Format.formatter -> ('a, 'b) Df_struct.dfgraph -> unit
  val print_dot_clustered_dfgraph :
    Format.formatter -> ('a, 'b) Df_struct.dfgraph -> unit
  val print_dot_dfgraph_custom :
    Format.formatter ->
    (Format.formatter ->
     Df_struct.dfnode_kind -> Df_struct.dfnode_id -> '-> unit) ->
    ('a, 'b) Df_struct.dfgraph -> unit
end