Я не согласен с тем, что для этого следует использовать BatList. Конечно, это здорово, если вы программируете с людьми, которые привыкли использовать эти библиотеки (возможно, тогда, пожалуйста, игнорируйте это!). Но в «классическом» случае это гораздо более естественно сделать с помощью достаточно простой хвостовой рекурсивной функции. (Вы можете перебрать аппенд, чтобы получить что-то мертвое, тривиальное, но на практике это работает не очень хорошо, и есть гораздо лучшее решение на основе аккумулятора, которое допускает простую реализацию на основе хвостового вызова.)