On Wed, Oct 26, 2005 at 07:06:15PM +0200, TSa wrote:
: HaloO,
: 
: Larry Wall wrote:
: >On Wed, Oct 26, 2005 at 04:59:04PM +0200, Juerd wrote:
: >: Larry Wall skribis 2005-10-26  7:31 (-0700):
: >: > One slightly serious ramification of the : switch is that the space
: >: > is required after the colon indicating a null invocant.
: 
: What is an invocantless method other than a sub?

It's not invocantless.  I should have said "implicit".  But it's implicit
anyway if you leave the colon out.  (And you can only leave out the invocant
for the declaration of single dispatch methods anyway.)

: >: >     method doit (: $a, $b, $c)
: >: 
: >: Or, we could separate it with a . instead of a :, perhaps?
: 
: I have proposed to markup invocant parameters with a leading dot
: sigil. More than one invocant either makes it a multi method or
: a mono method on a more complicated type.

Could do that, but again . is kind of invisible, and doesn't give us
tie-breaking multiple colons.

: If the zoning of parameters
: is dropped however, interpersed dotted params might make Perl approach
: Cecil in that respect and surpass it with combining dispatched params
: with named params.

That seems like a mental disaster waiting to happen to newbies.  Maybe
there are reasons people are avoiding Cecil...

: >: This is already more or less very heavily associated with invocants
: >: anyway.
: 
: Yes, and dispatch as a runtime keyed access into a code multitude.
: The covariant part of the method's sig! The code equivalent to keyed
: data access into hashes.

Um, yeah.  Won't play in Peoria, though.

: >I think a . would be too lightweight visually within the signature.
: >Plus . is a postfix prefix syntactically, not a delimiter.
: 
: How are multiple --> handled in a method sig? The standard case
: of a method defined in a class puts the class type into a primary
: or pre-dispatch position, or not? I mean that
: 
:    class Foo
:    {
:        method bar ($x, $y) {...}
:    }
: 
: might just mean
: 
:    class Foo
:    {
:        method bar (¢Foo $?SELF --> $x, $y --> ) {...}
:    }
: 
: The left --> is just the virtualizer call. I tend to call
: that slot accessor. The return value of a dispatch is the
: not yet invoked but curried on the invocant(s) method. This
: two stage propcess is in my eyes nicely indicated by the
: two -->. But we could also but a : in the dispatch arrows
: like -:-> or :-> or -:> which all look somewhat ugly.

I kind of like : for that, actually. :-)

: >: Hmmm...
: >: 
: >:     method .doit (...) { ... }
: >:     method $foo.doit () { ... }
: >
: >I think it would be a mistake to move the invocant outside the
: >signature.  We've just taken pains to move the return type *into*
: >the signature.
: 
: But the distinction between the dispatch/covariant part and the
: contravariant lhs of the arrow type is difficult if we allow multiple
: arrows in sigs. I would therefore like to propose anpther trait for
: methods: the 'on' part. To wit:
: 
:   method doit (...) on (invocant sig) { ... }

I don't see how that relates.

: Well, we could take the ¢ sigil to form invocant twigils ¢$, ¢@, ¢%, ¢&
: which look a bit nicer with ^ though: ^$, ^@, ^%, ^&. The association
: with $^, @^, %^, &^ in placeholders is a bonus in my eyes because they
: are post dispatch on void invocants :)

Don't know what that means either.

: The guiding theme in my line of thinking about twigils is that there's
: a void between their two chars. A "pair" of type constraint and uncaptured
: actual invocant type so to say. Well and we could capture it with
: 
:   method doit ( Constraint ^Actual $foo, NonInvocant $blahh ) {...}
: 
: to deal have it available inside. Am I makeing sense? Which impact all
: this has an the self method discussion I don't know, but ^. and .^ come
: to mind. The former would make ^.foo a method on the current invocant
: and a bare .^ would dispatch the current method on the topic or some such.

I haven't the foggiest clue if you're making sense.  And that's the
scary part.

Larry

Reply via email to