
Hi Alex,
The problem is that when you go fro
months = range (Jan,Dec) : months realmonths = concat months
to
months = concat (range (Jan,Dec) : months)
you're not just collapsing the two functions, you're changing the definition (and type!) of "months" which you referred to within the months function. Since months is a recursive function, you can't necessary fold in the definition of realmonths because you want the recursion to apply to the original months, not the original realmonths.
Of course, why didn't I see that :) I think I had managed to get my head into its own recursive loop.. I think I might have to replace my evening glass or three of wine with some Red Bull while I am getting my mind around this stuff.
As you suspected, there are better and simpler ways of doing this available, although your way is good for getting the hang of recursion, even though experienced haskellers really don't use recursion all that much. (Most prefer to use functions that encapsulate recursion *patterns* such as map, filter, folds and many more.)
Thank you very much for you help and suggestions, I shall bear them in mind. - Philip