新行缩进Haskell

时间:2017-02-23 23:35:54

标签: string haskell indentation

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

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

以下是我的观点:

  onThreeLines "Life" "is" "wonderful"

我得到了什么:

 "Life\nis\nwonderful"

我也尝试过以下角色,但它也不起作用。

"'\n'"

2 个答案:

答案 0 :(得分:4)

执行此操作应该可以使它工作:

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实例进行显示。

答案 1 :(得分:2)

你的功能没有任何问题。 "生命\ NIS \ nwonderful"是你想要的结果字符串。请记住,如果您希望正确呈现换行符,请将其传递给putStrLn

之类的函数
putStrLn (onThreeLines "Life" "is" "wonderful")

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