Hacker News new | ask | show | jobs
by yrro 3800 days ago
The type system only goes so far. If your refactored code calls functions that take several different parameters of the same type, you can make mistakes that the compiler won't catch.
1 comments

In some sense, taking several parameters of the same type can be a code smell.

Foo(str, str, str) strikes me as somewhat suspect. I realize this isn't always avoidable, but a lot of the time it is.

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 "value types." That means you could turn something like this:

  loginUser(String, String)
Into this:

  loginUser(Username, Password)
These aren't just type aliases. So far as the language is concerned, Username and Password are incompatible types.