----- Original Message -----
From: "Luke Palmer" <[EMAIL PROTECTED]>
> Joe Gottman writes:
> > 3) Currying binds a function parameter to a value? Is there any way to
> > bind a function parameter to a variable? Consider the following code:
> >
> > sub printNum(int $x) {print "$x\n";}
> > my $foo = 0;
> > my $vindaloo = &printNum(int).assuming(x => $foo); #currying
> > ++$foo;
> > $vindaloo.();
> >
> > This code prints 0, not 1, because the currying binds the parameter
to
> > the value $foo had when the currying occurred, not the value it had when
the
> > curried function was called. It would be nice if there were some way to
> > curry so that a parameter is bound to a variable reference.
>
> There is. Best not to worry .assuming with details of references. Do
> it with a scratchpad:
>
> sub printNum($x) { print "$x\n" }
> my $foo = 0;
> my $vindaloo = { printNum($foo) };
> ++$foo;
> $vindaloo(); # Prints 1
>
> There's still those issues of getting $vindaloo's signature exactly
> right for complex cases. In any case, I don't think .bind would be hard
> to write.
>
>
> > This would probably have to be a different method than assuming.
> > Maybe something like &printNum(int).bind(x => \$foo)
But getting the signature of the returned code object right is a major
reason for using any kind of currying function instead of just writing a
scratchpad. Getting the signature right is a non-trivial task, and
.assuming and .bind would have to do exactly the same work to compute the
signature. Therefore, if we are defining one in the core I think we might
as well define the other as well.
Joe Gottman