Почему Template Haskell разрешает произвольные операции ввода-вывода во время компиляции?

Когда я пытался узнать о TH, я обнаружил, что он допускает произвольные IO действия во время компиляции (см. Что такого плохого в Template Haskell?< /а>). Мне это кажется довольно опасным. Это почему? Это действительно необходимо для некоторых задач? Или это просто упрощение его конструкции, чтобы «выбросить все нечистое в IO корзину для грехов»?

Обновление: мне также было бы интересно, есть ли какие-либо попытки создать безопасное подмножество TH, запрещающее произвольные IO операции.


person Petr    schedule 09.12.2012    source источник


Ответы (1)


Одним из основных предполагаемых применений Template Haskell является создание констант из внешних ресурсов, таких как большие текстовые значения из файлов или информация о сборке (версия, время, среда). Очевидно, что для этого требуется доступ к системе.

Затем нужно попытаться создать безопасный API для этого или просто разрешить произвольный ввод-вывод. Последний был выбран из-за того, насколько он прост и насколько легко ошибиться в безопасном API.

person Carl    schedule 09.12.2012