A class isn’t necessarily some wrapper around primitive types, they can contain data structures, other type instances, etc. Obviously that eventually leads to an end object containing a primitive, you can’t just have fancy trees of nothingness lol.
https://en.wikipedia.org/wiki/Data_type#Classification_of_da...
You absolutely can have types with only one value, e.g. a class with no members.
Then you can have a tree type composed of those nothing types, where the information is in the tree structure, not in any primitive value stored anywhere.
module Example
type mytype
val id: mytype -> mytype
end = struct
type mytype = {
position:(int * int)
}
type othertype = int
let id self = self
end
```How many classes I have defined? Exactly zero. How many types I have defined? Definetely not zero. One of these types is secretly equivalent to a primitive type, while the other is not, and none of this is known to users of these types.
I am not sure why keep trying to show "class = type". It is wrong, those are different concepts. I don't care what c++ says