%f форматирует второй аргумент как число с плавающей запятой. %.2f указывает, что нужно печатать только две цифры за запятой. \n представляет новую строку. Это не обязательно для этого примера.
Обратите внимание, что эта функция возвращает значение типа String или IO a, в зависимости от контекста. Демонстрация:
Prelude Text.Printf> printf "%.2f" (1337 :: Float) ++ " is a number"
"1337.00 is a number"
В этом случае printf возвращает строку "1337.00", потому что результат передается как аргумент (++), который является функцией, которая ожидает аргументы списка (обратите внимание, что String совпадает с [Char]). Таким образом, printf также ведет себя как sprintf на других языках. Конечно, трюк, такой как добавление второй строки, не требуется. Вы можете просто указать тип: