code: def update_with(self, update_fn, *maps):
          
          evolver = self.evolver()
          for map in maps:
              for key, value in map.items():
                  evolver.set(key, update_fn(evolver[key], value) if key in evolver else value)
  
          return evolver.persistent()
docs: Return a new PMap with the items in Mappings maps inserted. If the same key is present in multiple
          maps the values will be merged using merge_fn going from left to right.
  
          >>> from operator import add
          >>> m1 = m(a=1, b=2)
          >>> m1.update_with(add, m(a=2))
          pmap({'a': 3, 'b': 2})
  
          The reverse behaviour of the regular merge. Keep the leftmost element instead of the rightmost.
  
          >>> m1 = m(a=1)
          >>> m1.update_with(lambda l, r: l, m(a=2), {'a':3})
          pmap({'a': 1})