On Tue, 2007-09-18 at 22:45 -0700, Erick Tryzelaar wrote:
> On 9/18/07, skaller <[EMAIL PROTECTED]> wrote:
> > Well, they're not interchangeable since (1,2) doesn't specify
> > any labels.
> 
> Thats okay. Are you planning on implementing it?
> 
> > in any case this now works:
> 
> Cool! Oh, do you think we could declare types this way too? Maybe:
> 
> typedef foo = (a:int, b:int);
> 
> Or to have it similar to tuples:
> 
> typedef foo = a:int * b:int;

Yes, possibly. However at present I'm wrestling with a different 
problem: making this:

/////////////////////////////////
struct X { aa:int; bb:int; };

val k = X (1,2);
println q"aa=$(k.aa), bb=$(k.bb)";

val j = X (aa=11,bb=22);
println q"aa=$(j.aa), bb=$(j.bb)";
///////////////////////////

work. Now, in theory X can be used as a function:

        X: int * int -> X

and this (should!) work in applications:

        X (1,2)

and does in the example above. However, you can't use X as a function
value:

//////////////////////////////////////////
struct X { aa:int; bb:int; };

val k = X (1,2);
println q"aa=$(k.aa), bb=$(k.bb)";

var f = X of (int * int);
var z = f (1,2);
println q"aa=$(z.aa), bb=$(z.bb)";
/////////////////////////////////////
SYSTEM FAILURE
[gen_expr: closure] Can't wrap primitive proc, fun, or struct 'X' yet
//////////////////////////////////////

Woops .. :)

Of course this doesn't work in Ocaml either, and the workaround is
the same: eta-expansion:

        fun f (x:int, y:int)=> X (x,y);

is a 'manual' wrapper.

OK, so the reason for explaining all this is that  X a is FIRST 
bound like

        apply (closure X, a)

and later this is fixed up to be

        apply_ctor (X,a)

where X is known to be a struct constructor, i.e. X here is an
integer symbol number, NOT a general expression.

The problem is, a here is a tuple, not a record. I can handle that.
But later, if I actually wrap 'X as a function' with automatic
eta-expansion -- you will note the diagnostic LIES about primitives,
they ARE automatically wrapped -- then there is no way to wrap
'X as function taking some kind of record argument' without knowing
which argument type it is.

In other words I cheated by the assumption the argument of a struct
constructor can only be a tuple of its components :)

Anyhow .. this CAN be done. 

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to