Какая библиотека Haskell для интерполированных строк

На Hackage есть много разных библиотек, работающих с интерполированными строками. Некоторые из них имеют низкое качество, в то время как другие различаются количеством поддерживаемых функций.

Какие стоит использовать?

Примеры библиотек (в произвольном порядке): shakespeare, interpolatedstring-qq, Интерполяция


person Tener    schedule 21.01.2012    source источник


Ответы (1)


Я просмотрел все интерполяционные квазицитаты, которые смог найти на Hackage.

Интерполяционные библиотеки, которые стоит использовать:

  • interpolatedstring-perl6: поддерживает интерполяцию произвольного кода Haskell с разумным синтаксисом, но требует haskell-src- доп. Если вам просто нужен общий синтаксис интерполяции строк, я бы использовал это.

  • shakespeare-text: основан на семействе шаблонов Shakespeare и имеет минимальные зависимости; большинство других пакетов интерполированных строк зависят от haskell-src-exts, что весьма тяжелый пакет и может занять много времени и ресурсов для компиляции. Если вы используете какие-либо другие шаблоны Шекспира, я бы посоветовал использовать этот.

    Однако он не поддерживает интерполяцию произвольного кода на Haskell, хотя поддерживает не только простое раскрытие переменных; он также выполняет приложение функций, операторы и т. д. Я думаю, что он также использует Text, а не String; Я не уверен, можно ли его использовать с Strings, глядя на исходный код, хотя есть код поддержки, который предполагает, что это возможно.

  • Интерполяция: поддерживает произвольные выражения (опять же с 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
comment
Shakespeare-text не имеет полной поддержки выражений Haskell, но их много. Например, вы можете применять функции и использовать операторы. - person Michael Snoyman; 22.01.2012
comment
@MichaelSnoyman: Спасибо; Я скоро обновлю свой ответ. Одна вещь, которую я не смог понять из документации: поддерживает ли Shakespeare-text условные операторы и циклы? - person ehird; 22.01.2012