def merge[A,B,C,D](b : Map[A,B], c : Map[A,C])(d : (Option[B],Option[C]) => D): Map[A,D] = {
(b.keySet ++ c.keySet).map(k => k -> d(b.get(k), c.get(k))).toMap
}
def optionSeqBiFunctionK[A]:(Option[A], Option[A]) => Seq[A] = _.toSeq ++ _.toSeq
merge(a,b)(optionSeqBiFunctionK)