哪个Haskell库用于插值字符串

时间:2012-01-21 21:22:00

标签: haskell libraries hackage

Hackage上有许多不同的库处理插值字符串。有些质量较差,而有些则因其支持的功能而异。

哪些值得使用?

图书馆示例(无特定顺序):shakespeareinterpolatedstring-qqInterpolation

1 个答案:

答案 0 :(得分:11)

我看了一下我在Hackage上找到的所有插值quasiquoter库。

值得使用的插值库:

  • interpolatedstring-perl6:支持使用合理的语法插入任意Haskell代码,但需要haskell-src-exts。如果您只想要一般的字符串插值语法,我会使用它。

  • shakespeare-text:基于莎士比亚系列模板,具有最小的依赖关系;大多数其他内插字符串包依赖于haskell-src-exts,这是一个非常繁重的包,可能需要大量的时间和资源来编译。如果您使用任何其他莎士比亚模板,我建议您使用此模板。

    但是,它不支持插入任意Haskell代码,尽管它支持的不仅仅是简单的变量扩展;它还有功能应用程序,运算符等。我认为它也使用Text而不是String;我不确定它是否可以与源代码中的String一起使用,尽管有支持代码可以提示它。

  • Interpolation:支持任意表达式(同样使用haskell-src-exts),并且还具有内置循环功能。如果你想要更像“模板”的功能而不仅仅是简单的插值,那么值得考虑,尽管我个人认为语法非常难看。

插值库可能不值得使用:

  • interpolatedstring-qq:似乎是基于interpolatedstring-perl6;它已经超过一年未更新,并且似乎功能少于interpolatedstring-perl6。除非你真的附在#{expr}语法上,否则我不会考虑这个。

  • interpol:作为预处理器实现,在字符串中赋予{foo}特殊含义; IMO太重量级的解决方案,并且具有如此轻量级的语法,可能会破坏现有代码。

总之,如果你不介意haskell-src-exts依赖,我建议使用interpolatedstring-perl6,如果你这样做(或者已经使用莎士比亚模板),我建议使用莎士比亚文本。

另一种选择可能是使用string-qq包和更通用的模板引擎;它支持StringTextByteString,它们应涵盖所有用途。但是,这显然不支持嵌入Haskell代码,并且您需要单独指定变量,因此它可能仅在某些情况下有用。