我正在尝试创建一个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
答案 0 :(得分:2)
Haskell中的换行符可以用"\n"
表示。
如果您仍然在控制台中打印包含字符序列\n
的字符串,则可能表示您正在使用print
。请改用putStr
或putStrLn
。
您不想使用print
,因为它内部使用show
,它将字面换行编码为字符\
和n
。 print
在调试中比在实际生产代码中更有用。
答案 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'而不是换行符。