新行缩进 Haskell

New line indentation Haskell

我是Haskell的新手,有以下问题: 我打算创建函数,将三个字符串放在不同的行上。这是代码:

onThreeLines :: String -> String -> String -> String
onThreeLines a b c = a++"\n"++b++"\n"++c

这是我运行:

  onThreeLines "Life" "is" "wonderful"

我得到的是:

 "Life\nis\nwonderful"

下面这个字符我也试过,但还是不行

"'\n'"

您的功能有效。如果您在 GHCi 中使用 运行 this 或使用 print,您可能会对它在计算结果上调用 show 的事实感到困惑,它将值格式化为 Haskell 调试术语。对于字符串,这意味着包括引号和转义符。

putStrLn (onThreeLines "Life" "is" "wonderful") 应该完全符合您的期望。

像这样执行它应该可以正常工作:

main :: IO ()
main = putStrLn $ onThreeLines "hello" "world" "test"

执行程序,我得到:

$ ./test.hs
hello
world
test

你得到 "Life\nis\nwonderful" 的原因是因为 Show 实例被用于显示它将转义换行符。

λ> putStrLn "hello\nworld"
hello
world
λ> print "hello\nworld"
"hello\nworld"

请注意 print 使用 Show 实例进行显示。

你的函数没有问题。 "Life\nis\nwonderful" 是您想要的结果字符串。请记住,如果您希望正确呈现换行符,请将其传递给 putStrLn

这样的函数
putStrLn (onThreeLines "Life" "is" "wonderful")

此外,请务必查看 unlines 函数,该函数连接字符串列表,并用换行符分隔每个元素。