public function map(callable $callable)
    {
        $items = [];

        $keyType = null;
        $valType = null;

        foreach ($this->storage as $key => $val) {
            list($k,$v) = $callable($key, $val);

            if (!isset($keyType) && !isset($valType)) {
                $keyType = gettype($k);
                $valType = gettype($v);
            }

            $items[$k] = $v;
        }

        if (null === $keyType && null === $valType) {
            $keyType = $this->keyType;
            $valType = $this->valType;
        }

        return new static($keyType, $valType, $items);
    }
public function map(callable $callable)
    {
        $items = [];

        $keyType = null;
        $valType = null;

        foreach ($this->storage as $key => $val) {
            list($k,$v) = $callable($key, $val);

            if (!isset($keyType) && !isset($valType)) {
                $keyType = gettype($k);
                $valType = gettype($v);
            }

            $items[$k] = $v;
        }

        if (null === $keyType && null === $valType) {
            $keyType = $this->keyType;
            $valType = $this->valType;
        }

        return new static($keyType, $valType, $items);
    }
{@inheritdoc}