Well, in lisp languages you just write an abstraction layer to account for such problem areas.<p>It&#x27;s really no different than the OO argument. If one wants OO functionality in lisp it can be implemented with the introduction of a few functions. But by using an OO only language you have just forced that abstraction to the surface leaving you with only one way to write your code even when it&#x27;s not suitable for the problem space.<p>So the same could be said for Types. Without Type Inference you&#x27;re locking yourself in to model&#x2F;framework that has a list of disadvantages too.<p>I think the real problem is when people don&#x27;t recognize they need to account for those problem areas, and they don&#x27;t take the time to write the abstraction layer when needed and naturally they end up with bad results and feel like it&#x27;s just hacking, because, well, they are.