How to get every Nth element of an infinite list in Haskell?

functional-programming, haskell, list

Solution

My version using drop:

every n xs = case drop (n-1) xs of
              y : ys -> y : every n ys
              [] -> []

Edit: this also works for finite lists. For infinite lists only, Charles Stewart's solution is slightly shorter.

Problem

More specifically, how do I generate a new list of every Nth element from an existing infinite list? E.g. if the list is `[5, 3, 0, 1, 8, 0, 3, 4, 0, 93, 211, 0 ...]` then getting every 3rd element would result in this list `[0,0,0,0,0 ...]`

Original source