
Philip Scott
Hi Alex,
The problem is that when you go fro
months = range (Jan,Dec) : months realmonths = concat months
Another way to go about this is to always look at types. You've correctly surmised that you have to refer back to the name you're defining, months, in a recusive definition, so let's write it down as months = range (Jan,Dec) `somehowJoinWith` months What is somehowJoinWith's type? Its first argument is [Month], let's call it [a]. So somehowJoinWith :: [a] -> b -> b But you want its result to be a list of Month's too. So b = [a] and somehowJoinWith :: [a] -> [a] -> [a] Cons (:) simply won't fit here, as it is :: a -> [a] -> [a]. (++) OTOH does fit, and is exactly what you need. Thinking with types helps clarify the problem always. It helps us not to confuse oranges and boxes-of-oranges. :) Cheers,