The "type" type dream

Michel Fortin michel.fortin at michelf.com
Tue Nov 25 13:13:39 PST 2008


In the "Unification and extension of compile-time reflection" thread, 
Jarrett Billingsley wrote:

> static if(is(T : V[K], K, V))
> {
>    // V and K are defined here
> }

Since we're talking about unifying things...

[enter dream mode]

Imagine types as first-class values.

	static if (type V[type K] = T)
	{
		// V and K assigned from type T.
	}

Basically, we're declaring variables V and K of type "type". The "type" 
type simply holds a type. "type V[type K]" is a combined 
declaration/assignment containing the name and relative disposition of 
the two type variables to which we try to assign T. An impossible type 
assignment would assign void to both, a correct assigment would assign 
the corresponding non-void type for each variable in the specified 
position. In the if statement, void types converts to false, non-void 
types converts to true.

Now you can do all the above as separate statements if you wish (should 
make things easier to understand):

	type V; // V is void
	type K; // K is void
	V[K] = T; // compiler assign T to V and K according to the V[K] disposition.
	if (V && K) ...

Even better, type as function return type:

	type valueTypeOf(type T)
	{
		type V[type K] = T;
		return V;
	}

	static if (type V = valueTypeOf(T))
	{
		// V assigned from function valueTypeOf(T) (which returns a type).
	}

	valueTypeOf(T) a; // variable of the type returned by valueTypeOf(T).

Here, valueTypeOf is a function taking a type as argument and returning 
another type. Obviously, it's a function that can only be evaluated at 
compile-time, but with it we can just forget about using templates and 
declarative programming when we need to create variables of related 
types.

[exit dream mode]

Not sure what all this would entail, but if we could return types from 
functions, would we still need templates at all? Couldn't we just 
create any struct or class inside the function and return that? 
Unifying templates and functions... hum, I'm probably still dreaming.

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list