A cleaner but still fully lazy version of intersperse might be intersperse sep (x1 : x2 : xs) = x1 : sep : intersperse sep (x2 : xs) intersperse _ l = l (I'd quote to give some context, but gmane says I can't unless I artificially pad the length of my new text. Is there any way to post to this list other than gmane?)