Какая библиотека Haskell для интерполированных строк - PullRequest
6 голосов
/ 22 января 2012

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

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

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

1 Ответ

11 голосов
/ 22 января 2012

Я взглянул на все библиотеки квазиквотерной интерполяции, которые можно найти в 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, и вам нужно будет указывать переменные отдельно, так что это, вероятно, полезно только в определенных ситуациях.

...