哪个Haskell库用于插值字符串

Ten*_*ner 6 haskell hackage libraries

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

哪些值得使用?

库的示例(没有特定顺序):莎士比亚,interpolatedstring-qq,插值

ehi*_*ird 11

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

值得使用的插值库:

  • 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,如果你这样做(或者已经使用莎士比亚模板),我建议使用莎士比亚文本.

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

  • 莎士比亚文本没有完整的Haskell表达式支持,但它有很多.例如,您可以应用函数和使用运算符. (2认同)