3

これが私のコードです:

func :: Integer -> String
func i = "LoadC R" ++ i ++ "\n"

しかし、私はエラーが発生しました:

予期されたタイプ`[Char]'を実際のタイプ`Integer'と一致させることができませんでした

icharに変換するにはどうすればよいですか?

4

1 に答える 1

13

数値を文字列に変換するために使用showします。

func :: Integer -> String
func i = "LoadC R" ++ show i ++ "\n"

show多くのことに取り組んでいます(すべてではありません)。これを実際に印刷するには、次のことを行う必要があります

main = putStr (func 5)

または、ghciを使用している場合(コードを記述している間は頻繁に使用し、記述したらすぐにすべてをテストすることをお勧めします)、次のように記述できます。

putStr (func 5)

そしてそれは動作します。(理由は以下で説明します。)

putStrLn代わりに使用する場合putStrは、最後に余分な改行を入れます。印刷するものに新しい行が必要な場合は、\n好きな場所に挿入してください。

func2 :: Integer -> String
func2 i = "\nLoadC \nR\n" ++ show i ++ "\n"

改行がたくさんあります。

なぜ改行putStrに変わるのですか?\nええと、putStrタイプputStrLnString -> IO ()、与えられた文字列を画面に表示するIOプログラムに変換することを意味します。ghciでは、何かタイプのものを与えるとIO ()、それが実行されます。あなたがそれに別のタイプの何かを与えるならば、それはshowそれからそれputStrをします。これは、入力すると

"Hello\nMum"

と同じ効果があります

putStrLn (show "Hello\nMum")

一方\n、改行にしたい場合は、次のことを行う必要があります。

putStrLn "Hello\nMum"

画面に配置する前にghciがshowそれを実行するのを停止します。(自分で多くのことをしていることに気付いた場合はputStr (show x)、ショートカットがあります:print x。)

于 2012-10-27T20:39:28.730 に答える