Hackage上有许多不同的库处理插值字符串。有些质量较差,而有些则因其支持的功能而异。
哪些值得使用?
图书馆示例(无特定顺序):shakespeare,interpolatedstring-qq,Interpolation
答案 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包和更通用的模板引擎;它支持String
,Text
和ByteString
,它们应涵盖所有用途。但是,这显然不支持嵌入Haskell代码,并且您需要单独指定变量,因此它可能仅在某些情况下有用。