title: Checking whether signature accepts capture removes attribute values from invocant
body: <p>I have a class that java would call a &quot;bean&quot;.  I would like to be able to merge in values for attributes in stages but also check that anything merged matches the submethod BUILD signature:</p>
  <pre><code>    class A {
        has Int $.a;
        has Str $.b;
        submethod BUILD ( Int :$!a, Str :$!b ) { }
        my Signature $sig = ( A.^methods.grep: { .name eq 'BUILD' } )[0].signature;
        method fill-in ( *%args ) {
          say 'filling-in';
          my @args = %args.pairs;
          @args.unshift: self;
          say 'after unshift';
          self.raku.say;
          my Capture $arg-capture = @args.Capture;
          say 'after Capture';
          self.raku.say;
          unless $arg-capture ~~ $sig {
            warn '(warning)';
            return;
          }
          my Str $name;
          my %merged;
          say 'after check';
          self.raku.say;
          for self.^attributes -&gt; Attribute $a {
            $name = $a.name.substr: 2, *;
            %merged{ $name } = ( $a.get_value: self ) // %args{ $name } // $a.type;
          }
          self.BUILD: |%merged.Capture;
        }
      }
  
      my A $a = A.new: b =&gt; 'init';
      $a.fill-in: a =&gt; 1;
  </code></pre>
  <p>outputs</p>
  <blockquote>
  <p>filling in<br />
  after unshift<br />
  A.new(a =&gt; Int, b =&gt; &quot;init&quot;)<br />
  after Capture<br />
  A.new(a =&gt; Int, b =&gt; &quot;init&quot;)<br />
  after check<br />
  A.new(a =&gt; 1, b =&gt; Str)</p>
  </blockquote>
  <p>if the <code>@args.unshift: self</code> is changed to <code>@args.unshift: A</code>, then after Capture it dies with</p>
  <blockquote>
  <p>Cannot look up attributes in a A type object...</p>
  </blockquote>
  <p>I realize I don't need to do this since the fill-in code only considers attributes that exist in the class but wonder if clearing the values from the Capture invocant when checking whether the signature will accept it is the expected behavior?</p>
  <p>unshifting a throw-away instance ( <code>@args.unshift: A.new</code> ) works around the behavior.</p>