В функциональном программировании часто важно оптимизировать любой "циклический" код, чтобы он был рекурсивным. Рекурсивные алгоритмы хвоста обычно разделяются между двумя функциями, однако - одна из которых устанавливает базовый регистр, а другой - реализует фактический цикл. Хорошим (хотя и академическим) примером будет обратная функция.
reverse :: [a] -> [a]
reverse = reverse_helper []
reverse_helper :: [a] -> [a] -> [a]
reverse_helper result [] = result
reverse_helper result (x:xs) = reverse_helper (x:result) xs
"reverse_helper" на самом деле не очень хорошее описательное имя. Однако "reverse_recursive_part" просто неудобно.
Какое соглашение об именах вы использовали бы для вспомогательных функций, подобных этому?