putStrLn str stack o-6ren">
gpt4 book ai didi

api - Haskell:节目搞砸了?

转载 作者:行者123 更新时间:2023-12-04 04:48:39 25 4
gpt4 key购买 nike

Haskell 中的 show 函数似乎没有做它应该做的事情:

Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack


overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>

当我声明函数时,我通常将类型签名设置为 Show,它不能正确处理换行符。我要它治疗 \n作为换行符,而不是字面意思 "\n" .当我将类型更改为字符串时,函数工作正常。但我必须为整数、浮点数等实现一个单独的函数。

例如,我可以声明一个函数:
foo :: (Show x) => x -> IO ()
foo x = do
putStrLn $ show x

...并这样称呼它:
foo "stack\n\noverflow"
foo 6
foo [1..]

我将如何让函数返回预期的内容? IE。哪个函数类似于 show但可以返回包含换行符的字符串吗?

最佳答案

Haskell 中 show 方法的约定是它产生一个字符串,当计算时,产生显示的值。

Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack

overflow
Prelude> putStrLn (show str)
"stack\n\noverflow"
Prelude>

关于api - Haskell:节目搞砸了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com