While nothingmuch and I are gutting junctions and trying to find the
right balance of useful/dangerous, I'm going to propose a new way to
do autothreading that doesn't use junctions at all.

First, let me show you why I think junctions aren't good enough:

I can't extract the information that the threaded call returns to me. 
For instance, I want to say:

        my ($val1, $val2, $val3) = map { foo("bar", $_, "baz") } 1,2,3

But without obscuring the nature of what I'm doing with that unsightly
"map".  That is, I want the following (using pseudosyntax):

        my ($val1 | $val2 | $val3) = foo("bar", 1|2|3, "baz")

But this is impossible using junctions, because the order is lost
before it comes back to my declaration.

So I propose a simple extension to the hyper syntax.  The hyper meta
operator always points to the operator that is being hypered:

    +<< @a       # prefix
    @a >>*<< @b  # infix
    @a >>++      # postfix

Now I'm going to propose a variant for circumfix:

    foo(1, <<@a>>, 2);

Where the meta operator is pointing to the parentheses around the
call.  Then it is easy to do my map above:

    my ($val1, $val2, $val3) = foo("bar", <<1,2,3>>, "baz")

Luke

Reply via email to