user
An object is polymorphic when its specific type may vary.
The types a specific value may take, is called *class*.

It is trivial to copy an object if its type is known:

```
int x;
int y = x;

```

Here x is not polymorphic, so y is declared of same type (*int*) as x.
But if the specific type of x were unknown, then y could not be declared of any specific type.

The task: let a polymorphic object contain an instance of some specific type S derived from a type T.
The type T is known.
The type S is possibly unknown until run time.
The objective is to create an exact copy of such polymorphic object (not to create a reference, nor a pointer to).
Let further the type T have a method overridden by S.
This method is to be called on the copy to demonstrate that the specific type of the copy is indeed S.
assistant
(formerly Perl 6)

**Works with**: Rakudo version 2020.08.1

```
my Cool $x = 22/7 but role Fink { method brag { say "I'm a cool {self.WHAT.raku}!" }}
my Cool $y = $x.clone;
$y.brag;

```

Output:

```
I'm a cool Rat+{Fink}!
```