完全按照 Haskell 中的原样读取字符串
Read A String Exactly As It Is in Haskell
我的程序是这样的:
func = do
text <- getLine
return text
如果我阅读第 36
行,结果自然是 \123\456
。
我怎样才能得到36
作为结果?
根据评论中的讨论,您似乎希望将字符串作为字符串 literal 来解析,只是它没有被引号括起来。
我们可以在这里使用 read :: Read a => String -> a
,对于字符串,将其解析为就好像它是字符串文字到字符串一样。唯一的问题是这个字符串文字被双引号括起来 ("
).
因此我们可以添加这些引号,并使用:
<b>read</b> ('"' : text ++ "\"") :: String
然而,并非每个字符串 text
本身都是有效的字符串文字,因此上述操作可能会失败。例如,如果 text
本身包含双引号,则其前面不直接带有反斜杠 (\
).
我的程序是这样的:
func = do
text <- getLine
return text
如果我阅读第 36
行,结果自然是 \123\456
。
我怎样才能得到36
作为结果?
根据评论中的讨论,您似乎希望将字符串作为字符串 literal 来解析,只是它没有被引号括起来。
我们可以在这里使用 read :: Read a => String -> a
,对于字符串,将其解析为就好像它是字符串文字到字符串一样。唯一的问题是这个字符串文字被双引号括起来 ("
).
因此我们可以添加这些引号,并使用:
<b>read</b> ('"' : text ++ "\"") :: String
然而,并非每个字符串 text
本身都是有效的字符串文字,因此上述操作可能会失败。例如,如果 text
本身包含双引号,则其前面不直接带有反斜杠 (\
).