Historical Rebol made the decision to call things like BLOCK! and INTEGER! "datatypes".
They were thus DATATYPE! and not TYPE!.
For a long time I thought that was unnecessarily wordy. At some point I had a change of heart, and decided that I liked it.
I don't remember why I changed my mind, and can't find a post about that here.
It does have an advantage in the code as it stands, because internally Type is an enumeration (with an escape value in the enumeration as TYPE_0 for extension types)
Now that DATATYPE! is an antiform, I do sort of appreciate it being a little "weirder" in its name.
But it's a decision that if it's going to be revisited, it needs to be revisited sooner rather than later. It would be nice if I could remember why I thought there was a drawback to using just the name TYPE!.
All things are of a certain type. All types themselves are of type datatype. Datatype is a datatype thing.
Everything is neatly categorized.
Ignore Kurt Godel's incompleteness theorem.
In Haskell (and related languages) the type of a type is called a ‘kind’. All types in Haskell are of kind Type (in earlier versions also called *). You can write kind signatures for types, e.g. Maybe :: Type -> Type. Kinds themselves have a type too, in this case the slightly mindbending Type :: Type. And on it goes…
For a time I considered the idea of KIND being more like something's fundamental type (OBJECT!) and then it could have something more complex as a TYPE (e.g. BOOK! being a particular class of objects, with author and title and such).
As you know the concept of a type system of that sort is lacking.
In terms of extracting the type, I decided I did not like the way kind of sounded ("kind of value" is like "kinda value"). I pretty much gave in and said that type of would give you back the antiform datatype for BLOCK! for blocks, and move on with it. But it's still all pretty hazy.
However, with the merging of the "Heart" enum and the "Sigil" 2-bit value into one Byte in the Cell header, it no longer was accurate to call that the HEART_BYTE, since it multiplexed the heart and sigil together. So I called it the KIND_BYTE.
The type system may just have to suck for an initial release, and be something that gets hammered out later. I don't know. But the design space has opened up a bit with the TYPE_0 mechanics, and so I might take a crack at enums or other things to see what can be done.