public static function eachReference(& $list, callable $iterator, $context = null)
    {
        if ($list === null)
            return $list;

        static::associate($iterator, $context);

        if (!static::isTraversable($list))
            throw new \InvalidArgumentException("canot iterate over " . static::typeOf($list));

        if ($list instanceof \Iterator)
            throw new \UnexpectedValueException("cannot iterate over an iterator by reference");

        foreach ($list as $index => & $item)
            if ($iterator($item, $index, $list) === static::BREAKER)
                break;

        return $list;
    }