
On Feb 26, 2007, at 22:17 , P. R. Stanley wrote:
Prelude> 13:[1, 2] [13, 1, 2] which I don't believe has an address in the memory, correct?
If I understand what you're getting at: internally it just allocates a new cons cell, stuffs 13 in the left side and a pointer to the existing list [1, 2] in the right side, yes.
Back to the comma, surely, syntax sugar fulfills the role of an operator, a function, or a sequence of low-level procedures, either in part or comprehensively.
I suppose I'd have to go with the latter. In the formal constructor syntax (,,) it's just part of the operator name, but the tuple constructors are unique in that they don't need to be predeclared --- Haskell just looks for a parenthesized series of commas and counts the commas to find out the size of the tuple. (Note that the unit type () falls out of this as a degenerate case.) (1, 2, 3) is internally rewritten to (,,) 1 2 3, then parsed as the tuple constructor (,,) applied to the three arguments that constructor requires: Prelude> :kind (,,) (,,) :: * -> * -> * -> * Prelude> :type (,,) (,,) :: a -> b -> c -> (a, b, c) My point is that, syntactically, the comma can't really be considered a function or an operator per se; it's just special syntax. -- brandon s. allbery [linux,solaris,freebsd,perl] allbery@kf8nh.com system administrator [openafs,heimdal,too many hats] allbery@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH