Так, але дуже рідко корисна концепція є загальною концепцією.
Для початку, з точки зору теорії типів, це передбачає, що "динамічні" мови найкраще розглядаються як такі, що мають єдиний тип, який містить (серед іншого) метадані про характер значення, яке бачить програміст, включаючи те, що назвали б ці динамічні мови самі "типу" (що концептуально не одне й те саме). Будь-які подібні докази, ймовірно, нецікаві, тому ця концепція здебільшого стосується мов зі системами статичного типу.
Крім того, багато мов, які нібито мають "систему статичного типу", повинні розглядатися як динамічні на практиці в цьому контексті, оскільки вони дозволяють перевіряти та перетворювати типи під час виконання. Зокрема, це означає будь-яку мову із вбудованою підтримкою за замовчуванням для "рефлексії" тощо. Наприклад, C #.
Хаскелл незвичний тим, яку кількість інформації він очікує надати, зокрема, функції не можуть залежати від будь-якого значення, окрім вказаного в якості його аргументів. З іншого боку, мовою із змінними глобальними змінними будь-яка функція може (потенційно) перевіряти ці значення та відповідно змінювати поведінку. Таким чином , функція Haskell з типом A -> B
можна розглядати як програму прувінга мініатюрної , що A
передбачає B
; еквівалентна функція багатьох інших мов лише підказує нам, що A
і будь-яка глобальна держава є в поєднанні за обсягом B
.
Зауважте, що хоча Haskell підтримує такі речі, як відображення та динамічні типи, використання таких функцій повинно бути зазначено у підписі типу функції; так само для використання глобальної держави. Жоден з них не доступний за замовчуванням.
У Haskell також існують способи розбиття речей, наприклад, допускаючи винятки під час виконання програми або використовуючи нестандартні примітивні операції, що надаються компілятором, але ті мають сильне сподівання, що вони будуть використовуватися лише з повним розумінням способів, які виграли ' t пошкодити значення зовнішнього коду. Теоретично те саме можна сказати і про інші мови, але на практиці з більшістю інших мов зробити речі важче, не «обманюючи», і менше нахмуритися на «обман». І, звичайно, у справжніх "динамічних" мовах все це залишається неактуальним.
Концепцію можна взяти набагато далі, ніж це в Haskell.