docs: def value_map(f, m, *args, **kwargs):
      '''
      value_map(f, mapping) yields a persistent map whose keys are the same as those of the given dict
        or mapping object and whose values, for each key k are f(mapping[k]).
      value_map(f, mapping, *args, **kw) additionally passes the given arguments to the function
        f, so in the resulting map, each key k is mapped to f(mapping[k], *args, **kw).
  
      Unlike lazy_value_map, this function yields either a persistent or a lazy map depending on the
      input argument mapping. If mapping is a lazy map, then a lazy map is returned; otherwise, a
      persistent non-lazy map is returned.
      '''
      if is_lazy_map(m): return lazy_value_map(f, m, *args, **kwargs)
      else:              return ps.pmap({k:f(v, *args, **kwargs) for (k,v) in six.iteritems(m)})