> you would simply use a struct with a hidden

In such languages that's the equivalent of a newtype in Haskell.