我听说Data.Text
将在未来的Haskell版本中替换String
。我遇到的一个问题是(++)
仅为列表定义。要连接两个Text
,我需要使用
text1 `mappend` text2
很快就会变得冗长。理想情况下,我希望能够在这些++
上使用Text
,但如果没有,那么另一种选择是什么?我可以定义自己的中缀运算符,但我想要一种标准的方法来实现这一点。
答案 0 :(得分:17)
从GHC 7.4(不确定哪个版本),有一个预定义的<>
运算符与mappend
的运算方式相同。所以你可以说
text1 <> text2
这就是“标准”中缀运算符,但它还没有到处都可用。
答案 1 :(得分:1)
只需使用mconcat
即可获得所有类型的幺半群。你不需要导入任何东西,代码看起来更干净。
示例:
{-# LANGUAGE OverloadedStrings #-}
import Data.Text
table :: Text
table = "user"
fields :: [Text]
fields = ["id","nickname","password","date","posts","comments"]
insertquery :: Text -> [Text] -> Text
insertquery table fields = mconcat
["insert into ",table," (",names,") values (",vals,");"]
where
names = insertcomma fields
vals = insertcomma [singleton '?' | _ <- fields]
insertcomma = intercalate (singleton ',')
及其给出的结果:
λ&GT; insertquery表字段
“插入用户(ID,昵称,密码,日期,帖子,评论)值 (,,,,,??????);“