> or, supposing we have some form of parameterized types, you could create > something more generic like: > > class Val($N) { > multi *isa ($obj, Val($N) $class) { $obj ~~ $N } > } > > # and then... > > multi factorial (Int&Val(0) $g) { 1 }
Yes, YES! Marvelous! Not that that couldn't be done with a closure anyway... { my Class %valClasses; sub Val($N) returns Class { my Class $rclass = %valClasses{$N} //= class { multi *isa ($obj, $rclass $class) { $obj ~~ $N } } } } multi factorial (Int & Val(0) $g) { 1 } Hmm, would Val(0) be evaluated at compile-time in that case... or must I mark it with some sort of trait, or do some other kind of trick. Cool, anyhow. Luke