docs: def imap(p, *args, **kwargs):
      '''
      imap(p, args...) yields an immutable map object made from the plan object p and the given
      arguments, which may be any number of mappings followed by any number of keyword arguments,
      all of which are merged left-to-right then interpreted as the parameters of the given plan p.
      '''
      p = p if is_plan(p) else plan(p)
      params = merge(args, kwargs)
      return p(params)