There’s a lot of work going towards future type system features, such as improved parametric types and generic functions.
Some experiments early in the evolution of Verse followed the Smalltalk path into metaclasses and similar ideas, but we moved away from that in favor of types-as-sets-of-potential-values (also known as Curry typing) because it leads to simpler reasoning about programs in terms of math and logic (see articles on Proofs as Programs) and type system limitations as security properties (see Theorems for Free).
Verse goes to great effort to ensure that types just describe sets of potential values and nothing more. In C++, 0 has type int. In Verse, 0 doesn’t have a unique type but rather 0 belongs to every current and future type that happens to contain 0: the integers, the natural numbers, the rational numbers, and the type containing just 0.
So there isn’t a ‘TypeOf(MyValue:any):type’ function, but in the future you’ll be able to write syntax meaning ‘let t be any type that contains MyValue’.
Without metaclasses, how will we do the kind of type-dependent computations you’re referring to here? We plan to follow the general approach of Haskell typeclasses and Rust traits, in which programs can define generic bundles of operations and the types on which they operate, in a scalable and modular way that’s all checkable at compile time.