[m-dev.] Pretty printing non-canonical types
Ian MacLarty
maclarty at csse.unimelb.edu.au
Mon Oct 8 14:40:25 AEST 2007
On Mon, Oct 08, 2007 at 02:18:32PM +1000, Mark Brown wrote:
> On 08-Oct-2007, Ian MacLarty <maclarty at csse.unimelb.edu.au> wrote:
> > On Mon, Oct 08, 2007 at 10:49:25AM +1000, Ralph Becket wrote:
> > > I think Mark's justification is probably sufficient: the viewer of a
> > > different representations of the same non-canonical values will give
> > > them the same denotation, which means the results from deconstruct
> > > are semantically equivalent in the sense intended by
> > > promise_equivalent_solutions.
> > >
> >
> > I'm not convinced. You could easily create a function that generated a
> > string from a T using format/8. Say you called this function str. Then
> > you might have the goal 'str(X) = str(Y)' failing, even though X and Y
> > are equal. The problem is that the "viewer" of str(X) and str(Y) is not
> > necessarily a person. It might be the program. The program won't give
> > str(X) and str(Y) the same denotation, even though a human viewer might.
>
> Under my interpretation, the doc type technically should have a user
> defined equality, which means format/8 should be cc_multi.
Ah, that's okay then. I thought you were trying to bury the
promise_equivalent_solutions inside format/8.
> So this would
> put some committed choice stuff in the interface of pretty_printer, which
> admittedly is what Ralph wanted to avoid. But because the committed
> choice part is only when you write to a stream, it won't be anywhere
> near as awkward -- if the stream is io.state then a promise can be made
> immediately. In particular, format/{3,4} would be det. The awkwardness
> was the real issue, I think.
>
> I don't think we should try to implement the user defined equality, but
> format/8 should still be cc_multi.
>
Yes, I agree format/8 should be cc_multi if it's going to have a
polymorphic !State argument.
> In the case of a string stream (or any stream with equality) the promise
> won't be able to be made without extra consideration. And in your example,
> if that promise was added it would be a lie.
>
> (Incidentally, I find it confusing that the pretty_printer module exports
> procedures named format* for things that consume docs to create the final
> output, as well as for things that produce/transform docs. Is "formatting"
> the process of going from term->doc or doc->stream? The latter ones should
> be renamed, IMHO.)
>
What about write_doc?
Ian.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at csse.unimelb.edu.au
Administrative Queries: owner-mercury-developers at csse.unimelb.edu.au
Subscriptions: mercury-developers-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the developers
mailing list