> 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

Reply via email to