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代码,并且您需要单独指定变量,因此它可能仅在某些情况下有用.