开发者

Map newlines in GHCi

Simple question, but I can't seem to figure it out. I have a list, and I want to print out each element of it on its own line. I can do

map show [1..10]

for example, which will print out them all together, but with no newlines. 开发者_如何学运维My thought was to do map (putStrLn $ show) [1..10] but this won't work because I just get back an [IO()]. Any thoughts?


Aren't these answers putting too much emphasis on IO? If you want to intersperse newlines the standard Prelude formula is :

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

This is the thing you want written - newlines are characters not actions, after all. Once you have an expression for it, you can apply putStrLn or writeFile "Numbers.txt" directly to that. So the complete operation you want is something like this composition:

putStrLn . unlines . map show

In ghci you'd have

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


Try this: mapM_ (putStrLn . show) [1..10]


Here is my personal favourite monad command called sequence:

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

Therefore you could totally try:

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

Which is more wordy but it leads upto a function I find very nice (though not related to your question):

sequence_ . intersperse (putStrLn "")

Maybe an ugly way to do that but I thought it was cool.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜