On Fri, Nov 04, 2005 at 08:14:11PM +0100, TSa wrote:
: HaloO,
: 
: Larry Wall wrote:
: >On Tue, Oct 25, 2005 at 10:25:48PM -0600, Luke Palmer wrote:
: >: Yeah, I didn't really follow his argument on that one.  I, too, think
: >: that the one() junction in general is silly, especially for types.
: >
: >Well, I think it's silly too.  I'm just trying to see if we need to
: >reserve the syntax in case someone figures out a way to make it
: >unsilly in some dialect.
: 
: So, here are three non-trivial types that make excelent use of the
: one() junction:
: 
:   1) The parse tree of a packrat parser
:   2) a n-ary, recursive decision tree
:   3) a multi method
: 
: I wouldn't call these silly :)

Hmm, yes, one might even go as far as to put 4) union types.

: >And that's why I'm kind of
: >pushing for a natural bundling via juxtaposition that can be viewed
: >as ANDing the constraints:
: >
: >    :(Any Dog Cat Fish ¢T $dc)
: >
: >That says much the same thing as
: >
: >    :($ where {
: >         .does(Any) and
: >         .does(Dog) and
: >         .does(Cat) and
: >         .does(Fish) and
: >         .does(Class) and ¢T := $dc.class and
: >         .does(Scalar) and $dc := $_;
: >     }
: >    )
: 
: This is a very nice way to avoid explicit infix & syntactically,
: which is a great achievement in its own right. BTW, does a sub
: name in there count as a type constraint?

Which "in there" are you referring to?  Syntactically the inside of
a "where" is an ordinary expression, so "Dog" has to be predeclared
or use :: on the front.

: Or are only package kinds applicable? I mean the ones that would get
: a :: sigil if the sigil were required.

If you mean the "where" expression, the inside of .does() is just
evaluating an ordinary expression, so you could certainly put a sub
call or anything else in there.  If you're asking about the proposed
stacked type constraint syntax, I don't think a sub will work there
because of syntactic ambiguity with wanting to declare &blocks
and such.

Larry

Reply via email to