在Haskell中,为了表示文字字符串"\"
,人们通常会写:
"\\"
但是,有没有办法逃避字符串,以便单个反斜杠可以自己编写而无需转义?例如,我可以在C#中通过预先挂起的@
对字符串执行此操作:
@"\"
Haskell是否具有等价物?
答案 0 :(得分:5)
不,请参阅Haskell Lexical Structure的第2.6节。
Haskell没有原始字符串,heredocs或三重字符串。抱歉。你得到的唯一的好处是:
"ab\
\cd"
=>
"abcd"
忽略行结尾和开始斜杠之间的空格。例如,如果要发出一些在Haskell源中正确缩进但不在输出中过度缩进的内联HTML,这很有用。 (不是说我主张以这种方式做复杂的HTML输出。)
答案 1 :(得分:3)
有一个很好的library (raw-strings-qq)可以为你提供QuasiQouter
import Text.RawString.QQ
multiline :: String
multiline = [r|<HTML>
<HEAD>
<TITLE>Auto-generated html formated source</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
</HEAD>
<BODY LINK="800080" BGCOLOR="#ffffff">
<P> </P>
<PRE>|]
答案 2 :(得分:2)
由于QuasiQuoting机制,可以使用标准的haskell:
http://www.haskell.org/haskellwiki/Poor_man%27s_here_document#Quasiquoting
那样,没有问题了。唯一的问题是,现在你必须注意终止准规则序列的|],你可能必须逃避。在正则表达式的上下文中,我使用\ u7c或类似的东西自己逃脱了,我不记得确切。所以我使用unicode或ASCII代码作为管道字符。但是这个|]序列并不经常出现。
如果您对此感兴趣,请输入正则表达式,我是Rex库的忠实粉丝:
http://hackage.haskell.org/package/rex
其中不仅使用quasiquoting进行漂亮的正则表达式输入(没有双反斜杠),它还使用类似perl的正则表达式而不是默认烦人的POSIX正则表达式,甚至允许你使用正则表达式作为模式匹配你的方法参数,这是天才。