Возможно, основным источником проблем с производительностью в Haskell является случай, когда программа по неосторожности создает поток неограниченной глубины - это вызывает как утечку памяти, так и потенциальное переполнение стека при оценке. Классический пример - определение sum = foldr (+) 0
в Haskell.
Существуют ли системы типов, которые статически навязывают отсутствие таких кодов в программе, использующей ленивый язык?
Похоже, что это должно быть того же уровня сложности, что и при проверке других статических свойств программы с использованием расширений системы типов, например, некоторых разновидностей безопасности потоков или памяти.