public static function factory(IIteratorScheme $scheme = null, Traversable $source = null)
    {
        //static:: doesn't work in closures?
        $static = get_called_class();

        return function ($elements) use ($static, $scheme, $source) {
            return $static::from($elements, $scheme, $source);
        };
    }