的显示似乎在Haskell功能并没有做自己应该:Haskell:显示搞砸了?
Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack
overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>
当我宣布的功能,我通常把类型签名,显示,这不换行正确处理。我希望它将\n
视为换行符,而不是字面上的"\n"
。当我将类型更改为字符串时,这些功能正常工作。但我不得不执行一个单独的功能为整数,浮点数,等等,等等
例如,我可以声明函数:
foo :: (Show x) => x -> IO()
foo x = do
putStrLn $ show x
...并调用它是这样的:
foo "stack\n\noverflow"
foo 6
foo [1..]
我将如何获得函数来返回所期望的?即该函数与show
类似,但可以返回包含换行符的字符串?
你能给我们一个具体的用例吗?这会让你更容易理解你的意图。 – Martijn 2009-06-09 09:58:38
您可以添加一个检查来查看输入是否是一个字符串,然后将其打印出来。模式匹配是一个非常有用的事情。 – Rayne 2009-06-09 15:01:54
如果您以前使用过这些语言,则“show”就像Python中的repr()和Ruby中的“inspect”。 – 2011-12-12 20:55:25