Я не уверен, но я полагаю, что проблемы, о которых вы говорите, связаны с системами алгебраического типа, такими как Haskell и ML. Эти языки пытаются выполнить очень полный «статический» анализ типов еще до того, как вы запустите программу.
Некоторые интересные неприятности, связанные с очень строгим статическим анализом в системах алгебраического типа, заключаются в том, что очень трудно иметь контейнер, содержащий смесь объектов различных типов.
Например, в большинстве основных языков вы можете иметь разнородную смесь типов в списке. Пример в Python будет:
["a",1,"b",2]
Чтобы сделать это в системе строгих типов, вам нужно создать объединяющий тип обтекания, а затем шаблон сопоставить все возможные типы.
Но действительно интересной вещью, которая отсутствует в языках, является мощный самоанализ, который есть у вас в большинстве современных языков (например, C #, Java, Python, Ruby, Lisp).
Следовательно, эти языки позволяют выполнять мощное метапрограммирование и привязку данных, которые невозможно выполнить при полном статическом анализе.