加入两个没有`mappend`的Data.Texts的标准方法

Vla*_*ala 15 haskell

我听说这Data.TextString在未来的Haskell版本中取代s.我对此有一个问题(++)是仅为列表定义.要连接两个Texts,我需要使用

text1 `mappend` text2
Run Code Online (Sandbox Code Playgroud)

这很快就会变得冗长.理想情况下,我希望能够使用++这些Text,但如果没有,还有什么是另一种选择?我可以定义自己的中缀运算符,但我想要一种标准的方法.

dav*_*420 19

从GHC 7.4(不确定哪个版本),有一个预定义的<>运算符与...相同mappend.所以你可以说

text1 <> text2
Run Code Online (Sandbox Code Playgroud)

这就是"标准"中缀运算符,但它还没有到处都可用.

  • 之所以选择<>,是因为它已经被具有monoidal语义的漂亮打印库使用,并且它是最不突兀的选项,不会破坏现有代码,或者具有奇怪的偏差.另一方面,推广(++)不能以一种由于优先级而产生漂亮的漂亮打印库的方式来完成,并且它曾经在haskell 98之前具有另一个含义,当它用于我们的时候现在打电话给mplus.如果我们避免使用其他语言的含义,我们就没有任何操作员了!运算符<<,>>, - ,!,%,...等在其他语言中也都有其他语义. (8认同)