3

这是我的代码:

func :: Integer -> String
func i = "LoadC R" ++ i ++ "\n"

但我得到了错误:

无法将预期类型“[Char]”与实际类型“Integer”匹配

如何转换i为字符?

4

1 回答 1

13

用于show将数字转换为字符串:

func :: Integer -> String
func i = "LoadC R" ++ show i ++ "\n"

show适用于很多事情(但不是全部)。要实际打印这个,你需要做

main = putStr (func 5)

或者如果您使用的是 ghci(我建议您编写代码时经常使用它,并在编写完代码后立即测试所有内容),您可以编写

putStr (func 5)

它会起作用。(我将在下面解释原因。)

如果您使用putStrLn而不是putStr它,则会在末尾添加一个额外的换行符。如果您想在打印的内容中添加新行,请将\n其放在您喜欢的任何位置。

func2 :: Integer -> String
func2 i = "\nLoadC \nR\n" ++ show i ++ "\n"

里面有很多换行符。

为什么会putStr变成\n换行符?好吧,putStr并且putStrLn有类型String -> IO ()的含义,他们将给定的字符串转换为 IO 程序,并将其放在屏幕上。在 ghci 中,如果你给它一些 type IO (),它会做到的。如果你给它其他类型的东西,它会show它,然后putStr它。这意味着如果您键入

"Hello\nMum"

它具有相同的效果

putStrLn (show "Hello\nMum")

而如果你想\n成为换行符,你需要做

putStrLn "Hello\nMum"

show在将其放在屏幕上之前阻止 ghci对其进行处理。(如果你发现自己做了很多putStr (show x),有一个捷径:print x。)

于 2012-10-27T20:39:28.730 回答