public function map(callable $function)
{
$function = Functions::allowExcessiveArguments($function);
$clone = clone $this;
foreach ($clone->keyIdentityPositionMap as $position) {
$keyCopy = $this->keys[$position];
$valueCopy = $this->values[$position];
$clone->values[$position] = $function($valueCopy, $keyCopy);
}
return $clone;
}