public function merge($collection, callable $merger, $default = null)
    {
        $array = $this->collection_to_array($collection);
        foreach ($array as $key => $value) {
            $current = $this->get($key, $default);
            $this->set($key, $merger($current, $value));
        }
        return $this;
    }