title: Strict type checking in binding to routine arguments
body: <p>With the routine definition below</p>
  
  <pre><code>sub bar( Int @stuff ) {
      return [+] @stuff;
  }
  </code></pre>
  
  <p>Both the lines below fail:</p>
  
  <pre><code>say bar( ^3 );
  say bar( [1,2,3] );
  </code></pre>
  
  <p>with error </p>
  
  <pre><code>Type check failed in binding to parameter '@stuff'; 
  expected Positional[Int] but got Array ($[1, 2, 3])
  </code></pre>
  
  <p>Assignment to a variable with the same definition, however, works</p>
  
  <pre><code>my Int @works = [1,2,3] ;
  say bar( @works );
  </code></pre>
  
  <p>Obviously variable assignment and argument binding does not work in exactly the same way, but is it because type checking is strict?<br>
  Or Is there any other mechanism at work?</p>