function unionMap$<T, U=T>(x: T[], y: T[], fm: MapFunction<T, T|U> | null=null): T[] {
  var fm = fm || IDENTITY;
  var s  = toSet(x, fm), i = -1;
  for (var vy of y) {
    var wy = fm(vy, ++i, y);