public function merge(Setting $merge)
        {
            /** @var Setting $value */
            foreach ($merge as $key => $value) {
                if (Arrays::exists($key, $this->data)) {
                    if (is_int($key)) {
                        $this->data[] = $value;
                    } elseif ($value instanceof self && $this->data[$key] instanceof self) {
                        $this->data[$key]->merge($value);
                    } else {
                        if ($value instanceof self) {
                            $this->data[$key] = new static($value->toArray(), $this->allowModifications);
                        } else {
                            $this->data[$key] = $value;
                        }
                    }
                } else {
                    if ($value instanceof self) {
                        $this->data[$key] = new static($value->toArray(), $this->allowModifications);
                    } else {
                        $this->data[$key] = $value;
                    }

                    $this->count++;
                }
            }

            return $this;
        }