[m-dev.] Contribution: Pretty Printing Library
    Ralph Becket 
    rbeck at microsoft.com
       
    Wed Apr 12 19:23:41 AEST 2000
    
    
  
> From: Fergus Henderson [mailto:fjh at cs.mu.OZ.AU]
> 
> A good exercise to see whether the interface to this pretty printing
> library is general enough to be widely useful would be to try
> reimplementing compiler/error_util.m using it.
> 
> I think the answer will be that it is not quite general enough,
> because it only provides indentation by N spaces (`nest(int, doc)'),
> rather than allowing the programmer to specify that something
> should be indented by inserting some given string in the left
> hand column.
> 
> I think there are a lot of cases where it would be useful to
> allow indentation by an arbitrary string.  For example,
> suppose you are generating program code, and consider
> formatting text which will appear in comments.
Good idea.
The current definition caters for `nest's and `line's like this:
(a) if the pretty printer *has* decided to flatten a group
    then all `nest's and `line's in that group are ignored - it's
    as if they weren't there;
(b) if the pretty printer has decided *not* to flatten a group 
    then `line's become line-breaks followed by the amount of
    whitespace dictated by the sum of the `nest's in scope.
We could add a second kind of nest taking a string as its first
argument rather than an indentation amount, e.g.
pprint__write(N,
  nest(
    "my label: ",
    line `<>` group(text("this is ") `</>` text("some text"))
  )
)
would produce the following, depending upon N:
my label: this is some text		{ N > 24 }
or
my label: this is
my label: some text			{ N < 24 }
The question is what semantics do we want for nested string `nest's?
Should we have
nest("my ", nest("label: ", Doc)) = nest("my label: ", Doc)
or
nest("my ", nest("label: ", Doc)) = nest("label: ", Doc)
?
What should we do for `nest(2, nest("my label: ", Doc))' ?
Perhaps all this stuff should just add up without any clever
semantics?  Yes, the more I think about it, the more this seems to be
the right thing to do.
Any opinions?
Ralph
--
Ralph Becket      |      MSR Cambridge      |      rbeck at microsoft.com 
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
    
    
More information about the developers
mailing list