function допускает только один аргумент, но допускает сопоставление шаблонов, а fun - более общий и гибкий способ определения функции.
Я обычно использую удовольствие, если нет веской причины использовать функцию.
Вы можете видеть это в коде, который вы отправили, где объявление fun принимает 3 аргумента, а объявление function выполняет сопоставление шаблонов на нем.