I'd kill for some UFCS action. Here's my interpretation (only the first one works of course): range = take(stride(cycle([1, 2, 3, 4]), 2), 2); // :( range = take(stride(2, cycle(2, [1, 2, 3, 4]))); // :) range = cycle([1, 2, 3, 4]).stride(2).take(2); // :D