The Third Bit: An E-Bike for the Mind

Speaking of which, do any of my programming language friends know of a type system that captures "how it's used" as opposed to "what values it's allowed to have" in the way that Sajaniemi's variable roles do? Borrow checking in Rust is kind of somewhat adjacent, but not really the same thing - any others?

[note: I know several languages can capture *some* of these ideas, and anything with higher-order functions can *express* them, but I'm looking for one where an idea like "follower" or "most valuable" can be captured with an explicit definition or annotation rather than (for example) a Dafny invariant]

[note2: many languages have built-in support for some of Sajaniemi's roles (e.g., 'const'), but I'm looking for one that will let me define new roles in the same way that I can define new types.]