Ответ 1
Да, это возможно. Да, это было сделано. Вы действительно должны проверить хакеры на этот вопрос: http://hackage.haskell.org/package/Printf-TH
Стандартная библиотека предоставляет функцию printf
, которая управляется как varadic. Тем не менее, это не проверка времени компиляции того, соответствуют ли типы аргументов строке формата. Для этого потребуются зависимые типы, и похоже, что было бы очень сложно реализовать тоже! (Вам придется разбирать всю строку формата, используя сигнатуры типов... yuck!)
Но по размышлению, теперь мне интересно... Можем ли мы сделать это с помощью шаблона Haskell? На самом деле, кто-нибудь написал библиотеку для этого уже?
(Похоже, вы могли бы довольно легко написать квазициклер, который читает спецификацию формата printf и генерирует необходимую функцию N-arg...)
Да, это возможно. Да, это было сделано. Вы действительно должны проверить хакеры на этот вопрос: http://hackage.haskell.org/package/Printf-TH
Если вы согласны с тем, что "строка форматирования" на самом деле не является строкой, вы можете реализовать функцию, подобную printf, непосредственно в Haskell.
Это описано, например, в статье Ральфа Хинзе под названием "" Форматирование: акт класса ". В Hackage я могу найти пакет xformat, реализующий нечто похожее на этот подход.
В дополнение к Printf-TH
, кажется, что printf-mauke
имеет некоторую TH, заброшенную как задумку тоже... Любые другие примеры?