I've the following class:

```
class Names {
    has @!names;

    method add-name( $name ) { @!names.push($name) }

    multi method AT-POS( ::?CLASS:D: $index ) {
        my $new-names-obj = Names.new;

        for @!names[$index] -> $name {
            $new-names-obj.add-name($name);
        }

        return $new-names-obj;
    }

    method gist {
        @!names.join("\n")
    }
}

```

I'd like to be able to slice a `Names` object and the returned value
should be another `Names` object whose elements are sliced off from the
original `Names` object. For instance:

```
my $original = Names.new;
$original.add-name($_) for <jonathan joseph jotaro josuke giorno>;
my $sliced-off = $original[0..2];

say $original.^name;   #=> Names
say $original;         #=> jonathan, joseph, jotaro, josuke, giorno
say $sliced-off.^name; #=> List
say $sliced-off;       #=> (jonathan joseph jotaro)

```

When a single argument is passed, it works as expected and as described in this [answer](https://stackoverflow.com/a/54686741/10824322) but it's not the case with range since `AT-POS` ends up being called multiple times and collecting the results in a list. Thus I'm wondering if it's possible to return a single object `$sliced-off`, not a list of results, when using a range.