At Mon, 10 May 2010 13:46:52 -0400, Sam Tobin-Hochstadt wrote: > On Mon, May 10, 2010 at 12:44 PM, Matthew Flatt <mfl...@cs.utah.edu> wrote: > > It seems there should be a way to make > >> custom structs print as if they should be quoted, but that shouldn't > >> be the default. > > > > I'm not sure about the default. > > Here's the results of surveying uses of `prop:custom-write' in collects: > > 3 that shouldn't be quoted (1 of them by me) > 3 that are not expressions, but are printed with () anyway, so should > probably be made unreadable (all by me) > 9 unreadable, so it shouldn't be quoted > - 1 of these should be changed to a non-quoted form, probably (`set') > 1 that has a pseudo-self-quoting syntax (srfi/63) > > This suggests that no one is writing custom printers that should be > quoted. Further, since there's no mechanism for structs to > automatically extend the read syntax and the behavior of `quote', only > very rarely will structs be usefully printed in a quoted form. Both > of these pieces of evidence suggest to me that quoting is the wrong > default.
I think the piece/default that's missing is an "unreadable" property. There's currently no way to say that a custom-write procedure produces unreadable output, even though the printer otherwise treats unreadable values specially: It doesn't put a quote in front, although it lets a unreadable value be quoted if it appears within otherwise quotable value). So, how about replacing `prop:custom-print-as-expression' with `prop:custom-print-mode' whose value is either 'unreadable, 'unquotable, or 'quotable, where the default is effectively 'unreadable? > > > Finally, one more things I noticed when looking at the custom-write > > > docs: The following expression at the DrRacket repl errors with a > > > strange error message: > > > > > > > #0='#(#0#) > > > . read: #..= expressions not allowed in read-syntax mode > > > > > > This used to be allowed, right? > > > > This was allowed prior to v4.0, but not since v4.0. > > The error message is rather confusing - why does it mention `read-syntax'? The `read' function can accept the input #0=#(#0#) but `read-syntax' cannot, since no corresponding syntax object can be created. I'll make a note to try an improve the error message. _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev