[m-users.] Tuples as defined by the Book

Fabrice Nicol fabrnicol at gmail.com
Tue Feb 22 09:32:54 AEDT 2022

Hi everyone,

I confess to being a bit befuddled at the somewhat terse and elusive 
definition given by the reference manual on Type types (

    "The tuple types are {}, {T}, {T1, T2}, . . .
    A tuple type is equivalent to a discriminated union type (see
    Section 3.2.1 [Discriminated
    unions], page 33) with declaration
         :- type {Arg1, Arg2, ..., ArgN}
             --->     { {Arg1, Arg2, ..., ArgN} }."

The equivalence with discriminated union types is clear; the type 
declaration is a bit less so.

My understanding of tuples would rather be as follows:

    :- type {Arg1, Arg2, ..., ArgN}
         --->     {} (Arg1, Arg2, ..., ArgN).

In other words, tuple terms look to me as (instantiated) discriminated 
union types with anonymous constructors '{}' of arity N consisting of 
the two joined tokens '{' and '}'.

This is evidenced among others by tests/hard_coded/tuple_test.m:30.

I think the reference manual could perhaps rephrase its explanation in a 
more convincing and clear-cut way as above.

I honestly do not understand the manual definition; to  me it 
irresistibly smacks of infinite recursion. Something vaguely Chomskian 
in me, against all odds, keeps rewriting this declaration as follows:

     :- type {Arg1, Arg2, ..., ArgN}
         --->     { { { Arg1, Arg2, ..., ArgN} } }.

     :- type {Arg1, Arg2, ..., ArgN}
         --->     { { { { Arg1, Arg2, ..., ArgN} } } }.

     :- type {Arg1, Arg2, ..., ArgN}
         --->     { { { { { Arg1, Arg2, ..., ArgN} } } } }.

(... to Infinity ...)

somewhat hellishly.

But there must be something I missed there; I would be grateful for any 
principled denial of these misconceptions of mine (while we are all 
still alive).

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20220221/882a890f/attachment.html>

More information about the users mailing list