
Think back to when you first came across Haskell ... This, for example (from page 4 of the Gentle Intro -- my comments added): length :: [a] -> Integer -- [ ] means list length [] = 0 -- [] means list length (x: xs) = 1 + length xs -- list, but no [ ] Usually, showing a list uses square brackets and comma separators. So list literals use square brackets and comma separators. Type decls for a list uses square brackets. List builders use square brackets and commas -- such as [1, 3 .. 9] or [0 ..] Pattern matching for finite length lists use square brackets and commas: f [] = ... f [x] = ... f [x, y] = ... But pattern matching for unknown-length lists uses round brackets and colon -- such as that last binding for `length` above. And (nearly) every list-handling function has a pattern for unknown-length lists. Would this pattern matching seem less odd?: head [x ..] = x length [x, xs@..] = 1 + length xs Experienced Haskellers need not answer: you've got too used to ( : ) ;-) AntC