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], []]


Please critique my implementation. 

suffixes :: [a] -&gt; [[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] -&gt; [[a]]
tails xs                =  xs : case xs of
                                  []      -&gt; []
                                  _ : xs' -&gt; tails xs'