[Types-sig] New syntax?

Evan Simpson evan@4-am.com
Mon, 20 Dec 1999 11:51:08 -0600

[Tim Peters wrote:]

> So let's make one up.  The problem is spelling "tuple of unknown length"
> (and Paul's complaint notwithstanding, that *is* Python so we gotta deal
> with it).  Python has no notation for this.

In one of the many messages I started composing for this SIG, then never sent,
I mixed regexp-style notation into your ML-style declarations.  How's about:

(T*) means T-tuple of unknown length, (T+) means length at least one, (T1?,
T2{1,2}, T3) means optional T1 followed by one or two T2's and exactly one T3.
This still requires (T,) for a single-T tuple, but all other uses are
distinguishable from grouping.

> Actually, tuples show up in type specifiers rarely enough-- and look so much
> like grouping now --that I'd be happy requiring "Tuple" all the time.  Again
> one of those things that could be relaxed later if it proved too irksome.

Naturally, this isn't restricted to tuples;  Argument (and regular) lists could
also use it.
In particular, the much-discussed range could be declared as:

decl def range(start as Int?, stop as Int, step as Int?) return [Int*]

(and I still think "default" arguments used for closures should be separable
from regular arguments by a ';', but that's another SIG)

Still can't spell 'map', though.

decl def(ResultType, *SeqTypes) map(def(SeqTypes) return ResultType, map(lambda
x: Sequence(x), SeqTypes) )
    return [Result{len(SeqTypes)}]



Evan @ 4-am