Возможно, вам будет интересна эта статья:
Следующие 700 языков описания данных (PDF) , Кэтлин Фишер, Ицхак Мандельбаум и Дэвид Уокер, 2006.
Основная цель этой статьи - начать понимать семью
специальные языки обработки данных. Мы делаем это, как сделал Ландин,
разработка семантической структуры для определения, сравнения и
контрастные языки в нашем домене. Эта семантическая структура вращается
вокруг определения исчисления описания данных (DDC ^ α). это
исчисление использует типы из теории зависимых типов для описания различных
формы специальных данных: базовые типы для описания атомарных фрагментов данных и
конструкторы типов для описания более богатых структур. Мы показываем, как дать
денотационная семантика к DDC ^ α путем интерпретации типов как синтаксического анализа
функции, которые отображают внешние представления (биты) в структуры данных
в типизированном лямбда-исчислении. Точнее, эти парсеры производят оба
внутренние представления внешних данных и дескрипторы разбора
которые точно указывают на ошибки в оригинальном источнике.
Короче говоря: да, зависимые типы необходимы, если вы хотите статически кодировать детализированные инварианты ваших данных. Будучи более выразительными, чем алгебраические типы данных и GADT, они также позволяют выражать их и связанные с ними конструкции (например, комбинацию без тега объединения и маркированного продукта), имея возможность быть в некотором роде языком ассемблера описания данных, даже если пользовательская спецификация не раскрывает зависимости терминов напрямую.
Однако следует помнить, что такой формальный подход достигается ценой более крутой кривой обучения и более высокой сложности, даже если в теории он окупается более простыми, безопасными, лучшими спецификациями, инструментами манипулирования и тому подобным. Практикующие в этой области чаще всего пренебрегают всей красотой системы этого типа и прибегают к плохо определенным альтернативам. XML проигрывает JSON по другим причинам, потому что указывать схемы скучно, и люди не видят, какие преимущества они приносят. Да, позже вы можете указать статическую структуру принятого API-интерфейса JSON (и для этого вам могут понадобиться зависимые типы, поскольку сложность легко вписывается в такие форматы развития, а не проектирования), но это мало что дает, если никто не заботится об этом, используйте это, поймите это и, что более важно, поддержите это.
(На дополнительном фронте относительно вашего введения в тролль: пожалуйста, идите вперед и играйте с ATS , Guru или Agda , они предназначены для относительно практического программирования Если вы хотите пойти по пути Франкенштейна, есть также SHE ; Coq , не предназначенный для того, чтобы быть «практичным для разработки программного обеспечения», но, как известно, злоупотребляли таким образом - Я бы не советовал это для зависимого типа программирования , но это хорошо для не очень зависимого программирования плюс сопроводительные доказательства корректности - и если вы хотите продать свою душу, есть также F * скоро.)