Я уже говорил что обожаю библиотеку foldl?
Сначала, когда надо было максимально быстро зафигачить репорты, я тупо описал фолд из потока ивентов в конкретный репорт (единственно нужный). Теперь нужно сделать другой вид репортов -- хуяк-хуяк, логику подсчёта вынес в отдельный переиспользуемый тип (каждый "счётчик" считает не в большой тип AdReport а просто в Integer), написал две функции "поднятия" фолдов для каждого конкретного формата репорта и всё слепилось аккуратненько. Красота неимоверная.