На мой взгляд, первичен, все-таки, комбинаторный подход. Если разработчик понимает преимущества комбинаторного программирования, то, при необходимости, конкретные шаблоны проектирования (в духе монадной bind) он, походя, переизобретет, не отвлекаясь от прикладной задачи.
Для меня хорошим примером является вот эта реализация синт. анализатора Оберона:
https://github.com/vladfolts/oberonjs/blob/master/src/grammar.jsЕе автор ничего не знал ни о монадах, ни о PEG, когда писал этот код. Обычный рядовой разработчик на JS. И результат он получил, исходя из собственного чувства прекрасного :)