Haskell中的show函数似乎没有做它应该做的事情:
Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack
overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>
Run Code Online (Sandbox Code Playgroud)
当我声明函数时,我通常将类型签名设置为Show,它不能正确处理换行符.我希望它\n作为换行符,而不是字面意思"\n".当我将类型更改为String时,函数可以正常工作.但是我必须为整数,浮点数等实现一个单独的函数.
例如,我可以声明一个函数:
foo :: (Show x) => x -> IO ()
foo x = do
putStrLn $ show x
Run Code Online (Sandbox Code Playgroud)
......并以这种方式称呼它:
foo "stack\n\noverflow"
foo 6
foo [1..]
Run Code Online (Sandbox Code Playgroud)
如何让函数返回预期的函数?即哪个函数类似show但可以返回包含换行符的字符串?