There are workarounds for this kind of thing. Haskell uses newtypes to wrap a value with a semantically meaningful tag. Scala has a similar concept called &quot;value types.&quot; That means you could turn something like this:<p><pre><code>  loginUser(String, String)
</code></pre>
Into this:<p><pre><code>  loginUser(Username, Password)
</code></pre>
These aren&#x27;t just type aliases. So far as the language is concerned, Username and Password are incompatible types.