[m-rev.] For review: deconstruct non-canonical terms in pretty_printer.m
Ian MacLarty
maclarty at csse.unimelb.edu.au
Mon Oct 8 17:20:06 AEST 2007
On Mon, Oct 08, 2007 at 03:54:21PM +1000, Mark Brown wrote:
> On 08-Oct-2007, Ralph Becket <rafe at csse.unimelb.edu.au> wrote:
> > Index: library/pretty_printer.m
> > ===================================================================
> > RCS file: /home/mercury1/repository/mercury/library/pretty_printer.m,v
> > retrieving revision 1.6
> > diff -u -r1.6 pretty_printer.m
> > --- library/pretty_printer.m 3 Sep 2007 16:41:41 -0000 1.6
> > +++ library/pretty_printer.m 8 Oct 2007 04:05:09 -0000
> > @@ -645,7 +645,18 @@
> > Doc = set_formatting_limit_correctly(!.Limit,
> > Formatter(Univ, ArgTypeDescs))
> > else
> > - deconstruct(univ_value(Univ), canonicalize, Name, _Arity, Args),
> > + % We justify this promise on the grounds that
> > + % (a) observers of views of non-canonical values should give
> > + % them the same denotation,
> > + % (b) practically it is far more useful to see the construction
> > + % of non-canonical values (e.g., when debugging programs), and
> > + % (c) propagating cc_multi all the way up into the interface could
> > + % make use of the pretty printer very awkward.
> > + %
> > + promise_equivalent_solutions [Name, Args] (
> > + deconstruct(univ_value(Univ), include_details_cc,
> > + Name, _Arity, Args)
> > + ),
>
> In view of the followup discussion on the developers list, i think you
> should:
>
> - Add the promise here, and add a comment to say that the promise is
> valid because of the way that we interpret equality on the doc type.
>
> - Document in the interface that the intended interpretation of equality
> on type doc is that docs are equal if they describe the same logical
> document, and in particular that docs created with format/1 are equal
> if the terms are equal.
>
> - Also document that we don't actually implement this version of
> equality, and enjoin users to avoid it. It would help to give the
> example of two docs created from equal non-canonical terms being equal
> according to the intended interpretation, but failing a test
> unification.
>
> - Make format/8 cc_multi. Use cc_multi_equal at an appropriate point.
>
> - I would suggest adding format_io/8, which is specialised to the io
> stream, and which is det. This will need a promise too: document
> that this promise is safe because we can never test io streams for
> equality.
>
> - If you actually do need a string stream, we can discuss that next.
>
Isn't the above call to deconstruct inside the implementation of
format/8? If so why not just let the cc_multiness propogate up to
format/8, instead of adding this promise here and then using
cc_multi_equal in format/8? From looking at pretty_printer.m it seems
the only exported predicate that calls deconstruct is format/8, but
perhaps I'm missing something?
Ian.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list