Ограничение where
может принимать блок (лямбда) или оператор.
… where { $_ == 42 }; # block
… where * == 42; # lambda
… where $_ == 42; # statement
Дело в том, что ~~
не участвует в создании лямбда-кодов Wh whatCode (*
)
Итак, вы действительно создаете лямбду *.signature
внутри большего where
оператора (не лямбда).
constant $lambda = *.signature;
subset WalkCb of Callable where $lambda ~~ :(Int $);
Что, конечно, никогдавернуть True
, поскольку лямбда имеет подпись :(;; $ is raw)
Так что вместо этого просто напишите форму заявления.(используя неявное $_
)
subset WalkCb of Callable where .signature ~~ :(Int $);
my WalkCb $x = sub (Int $a) { return $a }
say $x(42); # 42