
Wolfgang Jeltsch wrote:
Make , an infix operator. Then even the syntax (,) works without further ado. Make , right-associative, for example. Then you can write (a1,...,an) which means (a1,(a2,(...,an))). You just need one data declaration:
data (a,b) = (a,b)
However, this has the problem that it leads to more partially-defined values than with today's tuples. For example, you could have a *triple* (a,_|_).
So maybe we should treat tuple syntax completely as special syntax (as it is today) and define our tuple types so that tuples don't end with the last element (as above) but with an explicit empty tuple (like lists end in a nil). This would also give use 1-tuples. We would need the unit type () for empty tuples. Then we define a cons type which has a strictness annotation:
data head :# tail = head :# !tail
Lennart Augustsson wrote:
Look at the HList stuff by Oleg and others and you'll find the kind of tuples you suggest.
One thing about HList: the HCons type is lazy in its second element, so HList tuples can be more partially-defined than normal tuples. Anybody know the rationale for this? I'm curious whether it could be changed, or if any code depends on it. -Brian _________________________________________________________________ Access your email online and on the go with Windows Live Hotmail. http://windowslive.com/online/hotmail?ocid=TXT_TAGLM_WL_HM_AE_Access_022009
participants (1)
-
Brian Bloniarz