Подтвердить что ты не робот

Тип-безопасный printf

Стандартная библиотека предоставляет функцию printf, которая управляется как varadic. Тем не менее, это не проверка времени компиляции того, соответствуют ли типы аргументов строке формата. Для этого потребуются зависимые типы, и похоже, что было бы очень сложно реализовать тоже! (Вам придется разбирать всю строку формата, используя сигнатуры типов... yuck!)

Но по размышлению, теперь мне интересно... Можем ли мы сделать это с помощью шаблона Haskell? На самом деле, кто-нибудь написал библиотеку для этого уже?

(Похоже, вы могли бы довольно легко написать квазициклер, который читает спецификацию формата printf и генерирует необходимую функцию N-arg...)

4b9b3361

Ответ 1

Да, это возможно. Да, это было сделано. Вы действительно должны проверить хакеры на этот вопрос: http://hackage.haskell.org/package/Printf-TH

Ответ 2

Если вы согласны с тем, что "строка форматирования" на самом деле не является строкой, вы можете реализовать функцию, подобную printf, непосредственно в Haskell.

Это описано, например, в статье Ральфа Хинзе под названием "" Форматирование: акт класса ". В Hackage я могу найти пакет xformat, реализующий нечто похожее на этот подход.

Ответ 3

В дополнение к Printf-TH, кажется, что printf-mauke имеет некоторую TH, заброшенную как задумку тоже... Любые другие примеры?