Дуже багато відповідей збираються в такі речі, як нескінченні списки та підвищення продуктивності в неоцінених частинах обчислень, але цього не вистачає більшої мотивації для лінивості: модульності .
Класичний аргумент викладений у цитованій роботі "Чому питання функціонального програмування" (посилання PDF) Джона Х'юза. Основним прикладом у цьому документі (Розділ 5) є відтворення Tic-Tac-Toe за допомогою алгоритму пошуку альфа-бета. Ключовий момент (стор. 9):
[Ледача оцінка] робить практичним модуляцію програми як генератора, який конструює велику кількість можливих відповідей, і селектора, який обирає відповідний.
Програму Tic-Tac-Toe можна записати як функцію, яка генерує все ігрове дерево, починаючи з заданої позиції, і окрему функцію, яка його споживає. Під час виконання це не по суті створює ціле дерево ігор, лише ті підрозділи, які споживач насправді потребує. Ми можемо змінити порядок і комбінацію, в якій альтернативи виробляються шляхом зміни споживача; взагалі не потрібно міняти генератор.
Нетерплячою мовою ви не можете записати це так, тому що, ймовірно, ви витратите занадто багато часу та пам'яті на генерування дерева. Отже, ви закінчуєте або:
- Поєднання виробництва та споживання в одній і тій же функції;
- Написання продюсера, який працює оптимально лише для певних споживачів;
- Реалізація власної версії лінь.