>>59
いや,f 0 にはそれなりの根拠があるので生かしておいて

f n [] = []
f n xxs@(x:xs) = top n xxs ++ f n xs
top 0 xs = [[]]
top n [] = []
top n (x:xs) = map (x:) $ top (n-1) xs