let merge_opt f k o1 o2 =
  match o1,o2 with
    | NoneNone -> None
    | Some x, None | NoneSome x -> Some x
    | Some x1, Some x2 -> Some (f k x1 x2)