[m-dev.] polymorphic modes

David Overton dmo at ender.cs.mu.oz.au
Wed Feb 9 13:38:54 AEDT 2000


Several weeks ago on the mercury_users list there was a discussion
about adding polymorphic modes where the inst parameters were
constrained to being ground(shared).

I proposed a syntax something like

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

to describe these constrained polymorphic modes.

I have now implemented these modes within the mode checker, but I have
not yet added the new syntax because I think this is something that
should be dicussed a bit first.

What I have currently done is assume that all inst parameters in
predicate and function mode declarations are implicitly constrained to
be ground(shared).  E.g.

	:- mode p(in(I), out(I)).

works for all insts, I, that are ground(shared), such as:

	:- mode p(in(ground), out(ground)).
	:- mode p(in(pred(in, in) is semidet), out(pred(in, in) is semidet)).
	:- mode p(in(bound(foo)), out(bound(foo))).

However, unique insts are not allowed to match inst parameters, so
	:- mode p(in(unique), out(unique)).

is not an instance of the polymorphic mode.

This syntax is currently quite convenient, but will cause problems
when we eventually allow more general polymorphic modes.  I'm
interested to see what people think about this and the `<= ground(I)'
syntax.  Does anyone have any better suggestions?

I will also post a diff of my current changes for comment.

David Overton       Department of Computer Science & Software Engineering
PhD Student         The University of Melbourne, Australia
+61 3 9344 9159     http://www.cs.mu.oz.au/~dmo
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