如何在IO中将一个字符串作为多行返回?

时间:2016-11-03 16:49:14

标签: haskell io

我正在尝试创建一个show'函数,它将获取元组列表并返回一个字符串,该字符串在每个元组之后创建一个新行。所以需要[(x,y),(a,b),(c,d)]并返回

x y

a b

c d

到目前为止,我在代码方面的目标是

show' :: [(String,Int)] -> String
show' [] = ""
show' (x:xs) = (fst x) ++ " " ++ (show (snd x)) ++ " something that will create a newline in IO " ++ show' xs

2 个答案:

答案 0 :(得分:2)

Haskell中的换行符可以用"\n"表示。

如果您仍然在控制台中打印包含字符序列\n的字符串,则可能表示您正在使用print。请改用putStrputStrLn

您不想使用print,因为它内部使用show,它将字面换行编码为字符\nprint在调试中比在实际生产代码中更有用。

答案 1 :(得分:0)

有函数func1(par1, FUNC(a, b)); //This statement(using macros) should transform into the above code after the preprocessing step. 连接行并为每个行添加换行符。所以你可以使用像

这样的东西
unlines

使用show' :: [(String, Int)] -> String show' xs = unlines $ map (\(x,y) -> (show x) ++ " " ++ (show y)) xs 打印输出,否则您会看到'\ n'而不是换行符。