Still same error message (2017.11,HEAD(e5b660e)) On 2015-03-10 09:12:23, masak wrote: > <Ven> m: sub trait_mod:<is>(&c, :$curried!) { my $arity = &c.arity; > &c.wrap(-> |args { args.list.elems == $arity ?? callsame() !! > &c.assuming(|args); }); }; sub foo($a, $b) is curried { say $a + $b; > }; foo(3, 4); my $c = foo(5); $c(6); > <camelia> rakudo-moar f8002f: OUTPUT«===SORRY!=== Error while > compiling /tmp/CqAnyz9U98Calling 'foo' will never work with argument > types (int) Expected: :(Any $a, Any $b)at > /tmp/CqAnyz9U98:1------> ed { say $a + $b; }; foo(3, 4); my $c = > ⏏foo(5); $c(6);» > <Ven> if an "is" wraps a sub, then it probably shouldnt get checked :) > * masak can't decide who is right, Ven or Rakudo > <masak> probably Ven. > * masak submits rakudobug > <Ven> :D > <masak> Ven: it is seldom this close. congratulations. > <Ven> thanks, I guess > * psch agrees > <psch> m: sub trait_mod:<is>(&c, :$curried!) { my $arity = &c.arity; > &c.wrap(-> |args { args.list.elems == $arity ?? callsame() !! > &c.assuming(|args); }); }; my &foo = sub ($a, $b) is curried { say $a > + $b; }; foo(3)(4) # seeing as this works > <camelia> rakudo-moar f8002f: OUTPUT«7» > <PerlJam> psch++ > <psch> but then we can't rebind a normal sub declaration either > <psch> which i think was justified with "it would break optimisation" > <psch> having the distinction makes "sub foo { }" somewhat magical > over "my &foo = sub { }", which is surprising, and with the bit of > jnthn++'s FOSDEM talk that i watched yesterday even seems wrong, > because "sub foo { }" is supposed to be just a lexical declaration > (unless there was more that i missed)
[perl #124036] [BUG] The compiler shouldn't yell at a call to a subroutine that has been wrapped by a trait in Rakudo
Aleks-Daniel Jakimenko-Aleksejev via RT Sat, 02 Dec 2017 19:01:26 -0800