\n
、putStrLn
、print
を使ってブレークラインを試しましたが、何も動作しません。私はHaskellでラインを壊すことができますか?
\n
を使用すると、結果は文字列を連結するだけで、putStrLn
またはprint
を使用すると、タイプエラーが発生します。 \n
ため
出力:
formatLines [("a",12),("b",13),("c",14)]
"a...............12\nb...............13\nc...............14\n"
putStrLn
用の出力:
format.hs:6:22:
Couldn't match type `IO()' with `[Char]'
Expected type: String
Actual type: IO()
In the return type of a call of `putStrLn'
In the expression:
putStrLn (formatLine ((fst x), (snd x)) ++ formatLines xs)
In an equation for `formatLines':
formatLines (x : xs)
= putStrLn (formatLine ((fst x), (snd x)) ++ formatLines xs)
Failed, modules loaded: none.
print
のための出力はputStrLn
のと同じである。ここに私のコードは次のとおりです。
formatLine :: (String,Integer) -> String
formatLine (s, i) = s ++ "..............." ++ show i
formatLines::[(String,Integer)] -> String
formatLines [] = ""
formatLines (x:xs) = print (formatLine ((fst x), (snd x)) ++ formatLines xs)
私はprint
とputStrLn
のエラーの理由を理解するが、私はそれを修正する方法は考えています。
私は完全に理解していませんでした。 barの戻り値はIO()であり、入力はありませんが、bar関数にパラメータを渡したい場合は?私は入力を指定する必要があるので。たとえば、 'bar s i = putStrLn(foo s i)'? – Marcio
@Marcio引数を追加できます。あなたの例の 'bar'は' bar :: String - > Int - > IO() '型を持ちます。 – chi
ありがとうございました!しかし、私はさらに疑問を持っています:barの結果をStringに連結する方法がいくつか存在しますか?私は 'show'で、次のようなことをしています:' 'hello" ++(show baz s) 'しかし、動作しませんでした。 "show"の使用に起因する(Show(IO())のインスタンスがありません "と表示され、何がショーのインスタンスになるかはわかりません。私があなたを利用しているのならごめんなさい – Marcio