问题是,我在做
reverse ("Hello how are you")
并得到如下输出:"uoy era woh olleh"
但预期的输出是:uoy era woh olleh
不确定如何从上述字符串中删除引号(“)。
答案 0 :(得分:5)
我假设您是指此:
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/sagemuej/.ghci
Loaded GHCi configuration from /home/sagemuej/.ghc/ghci.conf
Prelude> reverse "Hello how are you"
"uoy era woh olleH"
...实际上,您希望收到不带任何引号的答复。好吧,GHCi将所有评估结果通过print
传递,而Show
typeclass则使用putStrLn
将任何值转换为字符串-特别是一个有效的Haskell源代码字符串,并且因此可以用来重新创建值。 (这在原型制作中非常有用,它不仅限于字符串,还可以处理各种其他类型。)
现在,"uoy era woh olleH"
显然是有效的Haskell源代码
Prelude> "uoy era woh olleH"
"uoy era woh olleH"
但没有引号就不会:
Prelude> uoy era woh olleH
<interactive>:3:1: error:
Variable not in scope: uoy :: t0 -> t1 -> t2 -> t
<interactive>:3:5: error: Variable not in scope: era
<interactive>:3:9: error: Variable not in scope: woh
<interactive>:3:13: error: Variable not in scope: olleH
这就是GHCi这样做的原因。但是,如果您不想将回复用作Haskell代码,则也不需要show
包装器。要仅打印字符串的原始内容,您需要明确使用IO操作,其目的是:https://developer.salesforce.com/page/Adobe_XFDF
Prelude> putStrLn $ reverse "Hello how are you"
uoy era woh olleH
(如果您还不知道$
是什么,请以putStrLn (reverse "Hello how are you")
的简写形式阅读。)