# Create suffixes Function on List

I wrote the following suffixes function. Given a list, it returns the list + all sub-lists.

suffixes [1,2,3,4] == [[1,2,3,4], [2,3,4], [3,4], [4], []]

suffixes :: [a] -> [[a]]
suffixes []         = [] : []
suffixes xxs@(_:xs) = xxs : suffixes xs


Looks good to me. The only thing I would change is

suffixes [] = [] : []


to

suffixes [] = [[]]


as it's a bit more readable.

When re-inventing functions, it can be instructive to look up their definition using Hoogle. Following the links, we find this definition in Data.List:

tails                   :: [a] -> [[a]]
tails xs                =  xs : case xs of
[]      -> []
_ : xs' -> tails xs'

• Thank you for your continued help on most/all of my recent questions. – Kevin Meredith Oct 17 '14 at 1:21
• @KevinMeredith my pleasure. I thoroughly enjoyed the previous one (Streams) in particular :) – mjolka Oct 17 '14 at 1:22