[m-dev.] polymorphic modes

Ralph Becket rbeck at microsoft.com
Wed Feb 9 22:49:28 AEDT 2000

The syntax

:- mode p(in(I), out(I)) <= I is ground.

(or whatever variant) is fine, but I wonder if we could make
`I is ground' the default assumption, in the same way that
we have a default assumption for function modes?

It seems to me that the bulk of the requirement for polymorphic
modes lies with higher order programming, perhaps followed by
(nested) unique arguments.  Since a substantial part of the 
standard library (and other code) is concerned with various
types of collection, it would be mildly annoying to have to
specify `I is ground' everywhere that an higher order argument
could be passed.

On the other hand, it won't be that great a burden.


> One problem that people writing code using this extension
> will run into is that the standard library does not use
> polymorphic modes.  So for code that uses the standard
> library, it will typically not be OK to give the code a
> polymorphic mode declaration.
> One solution would be to change all the appropriate mode
> declarations in the standard library to be polymorphic. 

This gets in my way so often that I volunteer to handle
the change if this scheme is adopted.

> Another solution would be to propagate polymorphism in
> the types into the modes, as alluded to in my proposal
> for subtypes.  But that would require adding type class
> constraints in various places, which would break backwards
> compatibility.

I'm happy for that to happen for v2 if it means having a
more comfortable language.


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