在GHCi中映射换行符

时间:2011-03-01 02:33:10

标签: haskell ghci

简单的问题,但我似乎无法弄明白。我有一个列表,我想在它自己的行上打印出它的每个元素。我能做到

map show [1..10]
例如,

将一起打印出来,但没有换行符。我的想法是map (putStrLn $ show) [1..10],但这不起作用,因为我刚回来[IO()]。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

这些答案是否过分强调IO?如果你想穿插换行符,标准的Prelude公式是:

> unlines (map show [1..10])
"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"

这是你要写的东西 - 毕竟换行符是字符而非行动。获得表达式后,您可以直接应用putStrLnwriteFile "Numbers.txt"。所以你想要的完整操作就像这样的构成:

putStrLn . unlines . map show

ghci你有

> (putStrLn . unlines . map show) [1,2,3]
1
2
3

答案 1 :(得分:6)

试试这个:mapM_ (putStrLn . show) [1..10]

答案 2 :(得分:6)

这是我个人最喜欢的名为sequence的monad命令:

sequence :: Monad m => [m a] -> m [a]

因此你可以完全尝试:

sequence_ . map (putStrLn . show) $ [1..10]

哪个更罗嗦,但它导致我发现非常好的功能(虽然与你的问题无关):

sequence_ . intersperse (putStrLn "")

这可能是一种丑陋的方式,但我认为这很酷。