Я взглянул на все библиотеки квазиквотерной интерполяции, которые можно найти в Hackage.
Библиотеки интерполяции, которые стоит использовать:
interpolatedstring-perl6 : Поддерживает интерполяцию произвольного кода на Haskell с разумным синтаксисом, но требует haskell-src-exts.Если вы просто хотите использовать общий синтаксис интерполяции строк, я бы использовал это.
shakespeare-text : основано на семействе шаблонов Шекспира и имеет минимальные зависимости;большинство других интерполированных строковых пакетов зависят от haskell-src-exts , который является довольно тяжелым пакетом и может требовать много времени и ресурсов для компиляции.Если вы используете любые другие шаблоны Шекспира, я бы предложил пойти по этому пути.
Однако он не поддерживает интерполяцию произвольного кода на Haskell, хотя он поддерживает не только простое расширение переменных;он также выполняет функции приложения, операторов и т. д. Я думаю, что он также использует Text
вместо String
;Я не уверен, можно ли его использовать с String
s из исходного кода, хотя есть вспомогательный код, позволяющий предположить, что это может быть.
Интерполяция : Поддерживает произвольные выражения (опять же с haskell-src-exts), а также имеет встроенные средства зацикливания.Если вам нужно больше «шаблонных» функций, чем простая интерполяция, стоит подумать, хотя я лично нахожу синтаксис довольно уродливым.
Библиотеки интерполяции, вероятно, не стоит использовать:
interpolatedstring-qq : похоже, основан на interpolatedstring-perl6;он не обновлялся более года и, по-видимому, обладает меньшей функциональностью, чем interpolatedstring-perl6.Если вы действительно не привязаны к синтаксису #{expr}
, я бы не стал его рассматривать.
interpol : Реализован в качестве препроцессора, дает {foo}
особое значение в строках;IMO слишком тяжеловесное решение и с таким легковесным синтаксисом может привести к поломке существующего кода.
В заключение, я бы предложил interpolatedstring-perl6, если вы не возражаете против haskell-src-exts зависимость и текст Shakespeare, если вы это делаете (или уже используете шаблоны Шекспира).
Другой вариант может заключаться в использовании пакета string-qq с более общим механизмом шаблонов;он поддерживает String
, Text
и ByteString
, которые должны охватывать каждое использование.Однако это, очевидно, не поддерживает встраивание кода на Haskell, и вам нужно будет указывать переменные отдельно, так что это, вероятно, полезно только в определенных ситуациях.