相关疑难解决方法(0)

哈斯克尔:显示搞砸了?

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但可以返回包含换行符的字符串?

api haskell

8
推荐指数
2
解决办法
4783
查看次数

标签 统计

api ×1

haskell ×1