I'm not sure whether the following idea comports with implementability and who knows what other considerations, but it occurs to me that we could have:
foo bar: (baz bletch: 2).
would be considered to be calling bletch: in a function-call context, and in this context if | bletch | were a variable declaration in the pattern from which baz is derived, then bletch: 2 would mean give me another object just like baz but with 2 substituted in for the value of bletch. But having a command
baz bletch: 2.
by itself as a command like that would mean we are callling bletch: in a procedure-call context as contrasted with a function-call context, and the meaning under the declaration | bletch | in this context could be that we are inferring that the value of bletch on baz is 2; we are constraining the value to 2 on the grounds that we only got to this call because of sufficient tests that conditions hold that imply this.