2016-11-03 2 views
0

私は、タプルのリストを取得し、すべてのタプルの後に新しい行を作成する文字列を返す、show関数を作成しようとしています。だから、IOで複数の行として1つの文字列を返す方法は?

を[、(x、y)を(a、b)は、(C、D)]取ると

のxyを返すAB

私がこれまで持っているものCD

コードの条件は、

show' :: [(String,Int)] -> String 
show' [] = "" 
show' (x:xs) = (fst x) ++ " " ++ (show (snd x)) ++ " something that will create a newline in IO " ++ show' xs 
+0

ハスケルでは、改行を '' \ n "'で表すことができます。 –

+0

私は文字列のオープン位置に\ nを置くだけでそれを試みましたが、文字列に "\ n"という文字列が返されました。 – jazaniac

+0

'show '...'と 'putStrLn $ show' ...'を比較してください。 – chepner

答えて

2

"\n"で表すことができます。

まだ文字列\nを含む文字列をコンソールに出力している場合は、printを使用している可能性があります。代わりにputStrまたはputStrLnを使用してください。それは、内部の文字\nとしてリテラルの改行をエンコードしshowを、使用しているため

あなたはprintを使用する必要はありません。 printは、実際のプロダクションコードよりもデバッグに便利です。

0

行を結合し、それぞれに改行を追加する関数unlinesがあります。だから、そうでなければ、「\ n」の代わりに改行の表示されます出力を印刷する

show' :: [(String, Int)] -> String 
show' xs = unlines $ map (\(x,y) -> (show x) ++ " " ++ (show y)) xs 

使用putStrLnようなものを使用することができます。

関連する問題