Larry Wall wrote:
: Void context still exists and is not a form of singular or plural
: context. Perhaps this should be called nullar context, although void
: context works equally well for me and is not confusing because we have
: no Void type.
Nice, without Void we don't need the double headed
pseudo type lattice needed if we were to distinguish
subs that return no usefull---that is Any---value
from the ones that return no value at all.
So let's get just rid of Scalar and List types.
How does that go with the distinction between the container
and content type/class? Are all variables then implemented
with Parrot level refs/pointers/PMCs and there is no need for
a single element container class? Actually I would appreciate
this.
With the idea of the Perl6 type system having a type lattice
and | meaning LUB (lowest upper bound) the apex of which would
be Any.
::Any ::= Str | Num | Ref of Any | Array of Any | Hash of Any | ...
The ... is dynamically updated whenever a new toplevel type
is added: Any ::= Any | TheNewType.
How do we name the bottom Type? None? All? The latter would
nicely relate it to the & as the GLB (greatest lower bound).
But OTOH, None feels more natural and is e.g. used by the
Cecil folks as well.
: When we really want a scalar (the thing itself), we call that Any
: context or Scalar context, both forms of singular context (formerly
: called scalar context).
BTW, context is not meaningfull at runtime but only defines what
code the compiler generates? E.g. list context would be compiled
to some code that gathers the values from the involved expressions,
subs and constants---into what? An Array?
: What exactly is the difference between Scalar and Any?
Isn't any, that I can tell. So maybe we settle on Any for the type
and scalar() for the function/concept.
It'd be nice if we could
unify those somehow, but any() is taken. Maybe Item/item().
Just ideas from me for:
no value: void, zero
one value: mono, unary
>1 value: poly, many
--
TSa (Thomas SandlaÃ)