[m-users.] IO argument clobbering
Sean Charles (emacstheviking)
objitsu at gmail.com
Tue Jul 18 01:37:31 AEST 2023
Finally, you made my day Zoltan!
:)
> On 17 Jul 2023, at 16:34, Zoltan Somogyi <zoltan.somogyi at runbox.com> wrote:
>
>
> On 2023-07-17 17:26 +02:00 CEST, "Sean Charles (emacstheviking)" <objitsu at gmail.com <mailto:objitsu at gmail.com>> wrote:
>> [A] :- type callback == (pred(world, world, io, io)).
>> [B] :- inst callback == (pred(in, out, di, uo) is det).
>>
>> [C] :- pred run_loop(
>> callback::in(callback), world::in, world::out, io::di, io::uo
>> ) is det.
>>
>> In an attempt to demystify it all then, at point [A] I am defining an equivalence type which is merely a Mercury way of defining something similar to a C preprocessor macro in that the use of callback *as a type* specified will just cause the compiler to use the value on the right hand side of '=='. That much I understand, I think!
>>
>> At [B], I am defining an instantiatedness tree, that although it has the same name as that used at [A], bears no actual relationship to it in any way.
>>
>> At [C], I am declaring that run_loop/5 is a predicate that takes an argument of *type* callback, and that that it is an input, and that the input MUST have the instantiatedness defined by the definition at [B], the first use of callback being the type, and the in(callback) is stating that the value MUST be ground i.e. contain no free variables.
>>
>> Is that not even wrong, or close?
>
> What you write above is exactly right.
>
> Note that giving a type and an inst the same name is just a naming
> convention. It is useful in that it tells people who are familiar with
> the convention that the type and the inst are expected to be used together.
> However, it does have the drawback that it can, and often will, confuse
> people who are not familiar with the convention, and who don't know
> that when the name (such as "callback" in this case) is used in a context
> where the compiler expects a type, it will be interpreted as the name of
> the type, whereas in contexts where the compiler expects an inst,
> it will be interpreted as the name of the inst.
>
> Zoltan.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20230717/291a4a8b/attachment-0001.html>
More information about the users
mailing list