Принятый ответ содержит дезинформацию. Typechecking в Agda разрешима, если вы не отключите проверку положительности/завершения/юниверса. Более того, бесконечные процессы программируются в Agda, так же как IO-процессы программируются в Haskell: единственным ограничением является то, что бесконечные процессы не могут разворачиваться неограниченно при выполнении в процессе проверки типов. Вы можете реализовать симулятор машины Тьюринга в Агда: вы просто не можете сказать ложь, что гарантированно прекратите или убедите typechecker запустить его неограниченно.
Я, однако, согласен с тем, что в зависимости от типизированных языков все еще находятся на экспериментальной стадии, когда дело доходит до программирования «реального мира». Мы пока не можем поддержать развитие тяжелого режима, но мы можем выдержать значительное увлечение среди тех, кто смотрит в будущее, скорее, как функциональные языки в старые времена.
Идрис, как предложил Твай, является ближайшим кандидатом на «реальный мир», на котором набирается язык. Это гораздо больше сосредоточено на том, чтобы сделать вещи, чем Агда. Я бы порекомендовал Agda как лучший инструмент для того, чтобы справиться с идеями, лежащими в основе программируемого программирования, но Idris - более практичный вариант.
Это, я рад сказать, стоит рассмотреть недавние выпуски Haskell в качестве кандидата в этой дискуссии. Начиная с GHC 7.4, Haskell начал поддерживать полезное представление данных типа уровня и, по крайней мере, singleton (kludge, хотя это и есть), мы можем действительно иметь типы в зависимости от значений времени выполнения (за счет их зависимости от статических переменных ограничивается равными значениями времени выполнения). Таким образом, Haskell является реальным «реальным миром» на ранней стадии экспериментов с зависимыми типами.
Может быть лучше подходит для программистов.stackexchange.com ... – ChristopheD
Любой из них может быть использован. Вам нужно предоставить больше контекста для вашего вопроса. – jzd
Что относительно полноты Тьюринга? Это тоже требование? Также, когда вы говорите «задачи реального мира», вы имеете в виду «разрабатывать приложения», а не «доказывать теоремы», правильно? – sepp2k