Я - промежуточный программист Haskell с большим опытом работы на строгих языках FP и не-FP. Большая часть моего кода Haskell анализирует умеренно большие наборы данных (10 ^ 6..10 ^ 9 вещей), поэтому лень всегда скрывается. У меня есть достаточно хорошее понимание thunks, WHNF, сопоставление шаблонов и совместного использования, и я смог исправить утечки с помощью шаблонов ударов и seq, но этот подход с профилем и молитвой кажется грубым и неправильным.
Я хочу знать, как опытные программисты Haskell подходят к лень в время разработки. Я не спрашиваю о простых элементах, таких как Data.ByteString.Lazy или foldl '; скорее, я хочу знать, как вы думаете о ленивом аппарате более низкого уровня, который вызывает проблемы с памятью во время выполнения и сложную отладку.
Как вы относитесь к трюкам, сопоставлению шаблонов и совместному использованию во время разработки?
Какие шаблоны дизайна и идиомы вы используете, чтобы избежать утечек?
Как вы узнали эти шаблоны и идиомы, и есть ли у вас хорошие ссылки?
Как избежать преждевременной оптимизации непротекающих проблем?
(Изменен 2014-05-15 для составления бюджета по времени):
Планируете ли вы значительное время проекта для поиска и устранения проблем с памятью?
Или ваши навыки проектирования обычно обходят проблемы памяти, и вы ожидаете потребление памяти в самом начале цикла разработки?