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