Comment by robalni
2 days ago
Interesting, I have had ideas about having that feature in a language: being able to make subtypes, like "this is an integer but on the next level it is a shoe size". Can you give an example of such a language or how they usually do that?
Ada from day 1: Subtype with checks: https://www.adaic.org/resources/add_content/standards/05rm/h...
`type Shoe_Size is new Integer` defines a type incompatible with `type Age is new Integer`
Haskell: newtype ShoeSize = ShoeSize Integer
(The first ShoeSize is the type name, the second is the name of the constructor that converts an integer to one, or pattern-matches on it. This is unambiguous in Haskell and they are often the same. It has symmetry with "data" which is for more general ADTs that can have more than one constructor.)