Splitting a list into overlapping sub-lists
Using ++ to concatenate lists is a bad idea for performance, and it's a sign that you are not using recursion smartly.

Here's what I came up with:

chunk :: Int -&gt; [a] -&gt; [[a]]
chunk n xs =  
  if   length chunk' &lt; n then []
  else (chunk' : chunk n (tail xs))
    where chunk' = take n xs