> Which then goes back to: what is the use case of Slipping an Array?

Same as slipping any other type of Iterable: Fine-grained, elegant flattening 
and concatenating.

Compare:

  my @all = flat $first, @rest;

  my @all = $first, |@rest;

When you *know* that $first is a Scalar and @rest is an Array, those two do the 
same thing because `flat` doesn't descend into item containers.

But if those are, say, function parameters, then they can become bound to other 
things, e.g. the calling code could pass a List to `@rest` which *doesn't* have 
its elements itemized, so the version with `flat` would destroy the elements' 
internal structure.

Even if that wasn't the case, I'd consider the `|` version more elegant than 
the `flat` version, because it denotes very clearly to the reader *where* 
exactly something is being flattened into the outer list.

> because Slip is a List, it uses List.AT-POS, and that one
> doesn’t create a WHENCE with a container to be filled at a later time. 

Couldn't `@array.Slip` be made to properly iterate @array behind the scenes 
(the same way that `@array.map` would iterate it), instead of reaching into 
@array's guts and copying its elements in a way that misinterprets some of them?

Reply via email to