6

Hackage 上有许多不同的库处理插值字符串。有些质量很差,而另一些则因它们支持的功能数量而异。

哪些值得使用?

库示例(不分先后):shakespeareinterpolatedstring-qqInterpolation

4

1 回答 1

11

我查看了在 Hackage 上可以找到的所有插值准引用库。

值得使用的插值库:

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

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

    但是,它不支持插入任意 Haskell 代码,尽管它支持的不仅仅是简单的变量扩展;它也有功能应用程序、操作符等。我认为它也使用Text而不是String;我不确定它是否可以与String从源代码中查看的 s 一起使用,尽管有支持代码表明它可以。

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

插值库可能不值得使用:

  • interpolatedstring-qq:似乎基于 interpolatedstring-perl6;它已经有一年多没有更新了,而且功能似乎比 interpolatedstring-perl6 少。除非你真的很喜欢#{expr}语法,否则我不会考虑这个。

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

总之,如果您不介意 haskell-src-exts 依赖项,我建议 interpolatedstring-perl6,如果您介意(或者已经在使用 Shakespeare 模板),我建议您使用 Shakespeare-text。

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

于 2012-01-21T21:45:05.270 回答