Haskell如何追加像“.. ++ Integer ++ ...”这样的整数

时间:2012-10-27 20:33:06

标签: haskell append type-conversion

这是我的代码:

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

但是我得到了错误:

  

无法匹配期望的类型`[Char]'实际类型为“整数'

如何将i转换为char?

1 个答案:

答案 0 :(得分:13)

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

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

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

main = putStr (func 5)

或者如果您正在使用ghci(我建议您在编写代码时使用 lot ,在编写代码后立即对其进行测试),您只需编写

putStr (func 5)

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

如果您使用putStrLn代替putStr,则会在结尾处添加额外的换行符。 如果您想在打印的内容中添加新行,请将\n放在任意位置。

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

里面有很多新行。

为什么putStr\n转换为换行符?好吧,putStrputStrLn的类型为String -> IO (),这意味着他们将所提供的字符串转换为将其置于屏幕上的IO程序。在ghci中,如果你给它类型为IO ()的东西,它就会这样做。如果你给它一些其他类型的东西它会show它然后putStr那个。这意味着如果您键入

"Hello\nMum"

它与

具有相同的效果
putStrLn (show "Hello\nMum")

如果您希望\n成为换行符,则需要执行

putStrLn "Hello\nMum"

在将ghci放到屏幕上之前将其从show停止。 (如果你发现自己做了很多putStr (show x),那就有一条捷径:print x。)