<i>On the contrary, I think there is a higher cognitive load in having to reason about the behavior that results from using the + operator between two types when their types may differ. e.g., the Wat talk[1].</i><p>The simple fact that you run out of operators limits how many types can usefully exist.  In Python you use + quite reasonably for integers, floats, strings, and arrays.  By contrast raw Perl has equivalents only for numbers and strings, and is unable to distinguish between integers and floats.  That is why Perl doesn&#x27;t do exact arithmetic with large integers.<p>But, you say, Perl allows you to use bigint?  Well, yes.  And that is internally implemented with the magic of overload.  Using that you can have any number of types which overload + to do what they want, and you have all of the same issues as arose in the Wat talk.<p>It took a long time for me to be convinced, but I am now convinced that typed variables and untyped operators (like Ruby and Python do) is strictly better in practice than untyped variables and typed operators (like Perl does by default).  And as for the complexity, it is just something you have to live with.<p>Want evidence?  <a href="https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;sicp&#x2F;full-text&#x2F;sicp&#x2F;book&#x2F;node48.html" rel="nofollow">https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;sicp&#x2F;full-text&#x2F;sicp&#x2F;book&#x2F;node48.htm...</a> discussed this exact problem some 30 years ago.  I do not believe that the intrinsic problem is being solved any better today than then.