[m-rev.] for review: state vars syntax sugar

Ben Schmidt b.schmidt at ugrad.unimelb.edu.au
Thu Jan 25 13:26:13 AEDT 2007

> (3) For consistency in the concrete syntax, I think a state-variable
> mode pair should also be preceeded by !.  That is, the following should
> be equivalent:
> :- pred foo(!bar::!(in, out)) is det.
> :- pred foo(!bar).
> :- mode foo(!(in, out)) is det.
> :- pred foo(bar, bar).
> :- mode foo(in, out) is det.
> The ! symbol immediately alerts the reader to the fact that state
> variables are being used.  Just using a (_, _) pair for the modes
> omits this helpful visual clue.

There was lengthy discussion about this (thread: [m-dev.] syntactic 
suggar suggestion for state variables). I think the consensus of the 
list was *not* to use ! in the mode part of the declaration, but to have 
the syntax as Ondrej implemented it. Reasoning:

- Using !(in,out) looks like it should expand to (in0,out0),(in,out), 
i.e. four arguments, or two pairs, which it doesn't.
- If using ! as a functor for modes, it should take an inst argument if 
anything, but what is wanting to be done isn't parameterisable in terms 
of an inst argument (at least at present).
- The syntax as implemented by Ondrej is the one suggested in the 
existing compiler code.

Others can confirm that this was the consensus, or reopen the 
argument.... My vote is for the way Ondrej has done it.


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