public function pipe(iterable $items, $through)
    {
        foreach ($this->items as $key => $operator) {
            $new = new static();

            if (!Support::isCallable($through)) {
                $through = function ($operator, $item, $key) use ($through)
                {
                    return $operator->{$through}($item);
                };
            }

            foreach ($items as $item) {
                $new->set($key, $through($operator, $item, $key));
            }

            $items = $new;
        }

        return $items;
    }