sub identity is lazy { my @i = 1..Inf; return @i[shift @_]; }