
This is a tiny question on the "data" syntax. Consider the following (cribbed from Paul Hudak's "School of Expression" book, page 22): data Shape = Circle Float | Square Float I read this something along the lines of "'Shape' is a type constructor, for use in other type-defining expressions, and 'Circle' and 'Sqare' are its two data constructors, which should be used like functions of type 'Float -> Shape'". Indeed, typing "Circle" at the Hugs prompt reveals that Haskell has a "function" named "Circle" with type "Float -> Shape." However, I don't know of other circumstances where (1) I can declare functions with capitalized names (Hugs groans about syntax errors if I attempt the following: Circle2 :: Float -> Shape Circle2 = Circle And (2) where the argument-types of a function can be declared on the function's right-hand side. So, in some sense, am I right to think of "data" as a special syntax for special kinds of function declarations, namely data-constructor function declarations, and that this syntax is different in appearance, but not terribly different in meaning, from the ordinary syntax, typified by circle2 :: Float -> Shape circle2 = Circle (this is just the uncialized version of the one above, and is perfectly legal) Apologies if this is just too nitpicky and pedantic for words, but I try to notice everything.