|Posted by Justin Johansson||PermalinkReply|
Specifically I have a problem in trying to implement
a functional language translator in D. My target language
has a rather non-conventional type system, in which,
superficially at least, types can be described as being
Cartesian in nature. That is,
types in this system have two orthogonal dimensions:
(1) classical data-type (e.g. boolean, number, string,
(2) Kleene cardinality (occurrences) with respect to (1).
The axial origin of this Cartesian type-system correlates well
with the concept of the "top" type (AKA "Unit" in Scala)
and as the rather adhoc "void" type in many Algol-derived
languages such as C/C++/Java/D.
So along axis 1 we might broadly describe the classical
data types as item, boolean, number, string, object where
item is effectively either a superclass or variant of the
other mentioned types.
Along axis 2 we describe Kleene occurrences of 1 as may be
passed contractually to a receiving function. These
occurrences may be enumerated six-fold as:
Readers may see that, for example, zeroOrOne is a special
case (perhaps a subclass?) of zeroOrMore. exactlyOne is
a special case of both zeroOrOne and oneOrMore (sounds like
multiple inheritance?). OTOH, exactlyZero is a special
case of zeroOrOne, which, in turn, is a special case of
none is a special case of all of the above and reflects
the cardinality facet of the return type of a function
that never returns (say as by throwing an exception).
To make this type system even more enigmatic lets add a
third dimension, taking the 2-D Cartesian type system
model to a 3-D Spatial model, by imagining a further
degree of freedom with respect to laziness of evaluation
(AKA closure of arguments).
Now having hopefully described that a type is something
that might well have multiple orthogonal aspects to its
identity, how would one go about implementing a dynamic
language with such a complex type system in D?
I realize that this is a complex topic and that it might
require better articulation than so far I have given.
Nevertheless, thanks for all replies,