Copy Semantics (and should all values be COPY-able ?)

COPY in Rebol2, R3-Alpha and Red refuse to copy things like integers:

rebol2>> copy 1
** Script Error: copy expected value argument of type: series port bitset

r3-alpha>> copy 1
** Script error: copy does not allow integer! for its value argument

 red>> copy 1
 *** Script Error: copy does not allow integer! for its value argument

As Rebol2 says, it only copies [series! port! bitset!]

Red does [series! any-object! bitset! map!]

R3-Alpha does [series! port! map! object! bitset! any-function!], which made me curious as to what exactly copying a function would even be for. Looking at the R3-Alpha sources, it's just some nonsense that would be applicable only if you were planning to do self-modifying code and mutate the body of a function.

(Ren-C once had a mechanic for if you passed a function directly to COPY to create a separate non-hijackable identity. But see my notes on why that's not done anymore.)

So You Can't Copy Integers... Unless They're In a Block :thinking:

You don't get an error copying integers deeply:

>> copy:deep [[1] 2 [3 [4] 5]]
== [[1] 2 [3 [4] 5]]

Here we are seeing the block being copied deeply... and the integers seem to be "copied".

So you can copy an integer if it's inside a block, but not directly if it's outside a block?