On Tue, Feb 05, 2008 at 05:57:24AM -0500, Cale Gibbard wrote: > On 05/02/2008, Bulat Ziganshin <[EMAIL PROTECTED]> wrote: > > saveToFile x = writeToFile "data" (show x.getValue) > > Heh, I had to read this a couple times to figure out that it wasn't > just a blatant type error, and that (.) there doesn't mean function > composition. :) > > On the matter of extensible records, I really like the semantics of > Daan Leijen's proposal here: > http://research.microsoft.com/users/daan/download/papers/scopedlabels.pdf > > However, the syntax could use some work. Using (.) as a record > selector is out of the question. Personally, I think pt{x} for > extracting the x field of pt seems not-so-unreasonable, and meshes > well with the existing syntax for record updates.
The backwards compatable (and more clean conceptually IMHO) syntax I came up with for implementing the scoped labels proposal for jhc (sadly, not complete) was something like: new record (x = 3,y = 4) subtraction \r -> ( x = 3 | r - x) replacement \r -> (x := 3 | r) (equivalent to the above) type (x::Int,y::Char) degenerate cases: empty record (|) subtracting a label (| r - x) a record can always be determined by the presence of a '|' within parenthesis. note that these are unambigious because '=' and '|' are both reserved characters and cannot appear in parenthesis is this position otherwise. now when it came to record selection I was deciding between a couple. choice 1: use '.' as the current proposal suggests, but only when there is no space around it. choice 2: use ', declare that any identifier that _begins_ with ' always refers to a label selection function 'x point choice 3: use '#'. none are fully backwards compatable. I am still not sure which I like the best, ' has a lot of appeal to me as it is very simple to type and lightweight visually. note that instead of {} we use parens, the reason is that scoped labels have much more in common with tuples than the current labeld field mechanism so parens are a much more natural choice. you can think of tuples as 'anonymous positional data types' and records as 'anonymous labeled data types'. when thought about that way, parenthesis make a lot more sense. John -- John Meacham - ⑆repetae.net⑆john⑈ _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell