This is actually a couple of questions:
1: can you extend roles by saying: role Set is extended {}
2: if yes, does this change variables for which you said  $var does Set?
In other words, is the singleton class like a closure or a first-class
class?

What follows is just some example code in case my question is vague.

--Abhijit

role Set{
  method add ($elt) { $self.{$elt} = 1  }
  method remove ($elt) {...}
  method intersection($other where Set) {
    # can I write that as: method intersection (Set $other) ?
    return $self.keys.grep { exists $other{$^a}  }
  }
}

class Set_class does Set {}

class Collector{
  has %.coins does Set;        # brand new singleton class
  has Set_class %.stamps;      # use existing class
}

my Collector $collector .= new;
$collector.coins.add(new Coin());   #okay
$collector.stamps.add(new Stamp()); #okay

# much later during compilation

role Set is extended{ # is this: die if any collision in any class
  method difference ($other where Set) {...}
}

$collector.stamps.difference(...); # okay
$collector.coins.difference(...);  # Is that legal?

# In other words, is the singleton class like a closure or like a
first-class class?

Abhijit A. Mahabal      http://www.cs.indiana.edu/~amahabal/

Reply via email to