proto Range
    func __init(self, x)
        self.max = x
    end

    func __iter(self)
        self.i = 0
        return self
    end

    func __next(self)
        if self.i >= self.max then
            return nil // exit iterator loop
        end

        return self.i++
    end
end

for i in Range(10) do
    print("->" .. i)
end

local total = 0
for i in Range(1000000) do
    total = total + i
end

print("total: " .. total)