open Graph let rec clone_nodes gr = n_fold gr (fun g id -> new_node g id) empty_graph let gmap gr f = e_fold gr ( fun g id_s id_d cost -> new_arc g id_s id_d (f cost) ) (clone_nodes gr) let add_arc gr id1 id2 n = let lbl = find_arc gr id1 id2 in match lbl with | None -> new_arc gr id1 id2 n | Some cost -> new_arc gr id1 id2 (n + cost)