Да, вы можете использовать Template Haskell. Это несколько подходов к его использованию.
Один из подходов состоит в том, чтобы использовать quasiquotation для вставки (частей) текста спецификации в квазивокацию в исходном файле. Чтобы реализовать его, вам нужно написать парсер спецификации машины, который выводит Haskell AST. Это может быть полезно, если спецификация относительно статична, имеет смысл иметь подмножества спецификации или вы хотите вручную сопоставить части спецификации с различными модулями. Это также может быть полезно, в дополнение к другому подходу, возможно, предоставить инструменты для пользователей библиотеки, чтобы выразить вещи в терминах спецификации.
Другой подход заключается в execute IO в обычном сращивании шаблона Haskell. Это позволит вам прочитать спецификацию из файла (в этом случае также см. addDependentFile), сеть (не делайте этого) или выполнить произвольную программу для создания Haskell AST. Это может быть более полезным, если спецификация изменяется чаще, или вы хотите сохранить строгое разделение между спецификацией и кодом.
Если намного проще произвести источник Haskell, чем Haskell AST, вы можете использовать библиотеку, такую как haskell-src-meta, которая будет анализировать строку в шаблоне Haskell AST.
«Я могу написать программу, которая выдает источник Haskel». Если эта программа написана в Haskell, неизменно источник Haskell будет представлен некоторым AST в какой-то момент - преобразуйте это ast в TH ast и что AST может быть вставлен непосредственно в качестве кода TH. Вы не можете объединить модуль, его импорт и экспорт, поэтому у этого есть свои ограничения. Наконец, «ссылки на учебные пособия и руководства» не соответствуют теме SO. – user2407038
https://hackage.haskell.org/package/haskell-generate –
Есть ли какая-нибудь причина превратить его в библиотеку, а не просто написать интерпретатор? – PyRulez