let union u v =
    let keys = List.dedup (Map.keys u @ Map.keys v) in
    List.fold keys ~init:Map.empty ~f:(fun accu k ->
      Map.add accu ~key:k ~data:(
        Biocaml_iset.union
          (Option.value (Map.find u k) ~default:Biocaml_iset.empty)
          (Option.value (Map.find v k) ~default:Biocaml_iset.empty)
      )
    )