私は Haskell の初心者で、現在 LearnYouAHaskell を使用しています。空白で区切られた文字列を取り、それをより小さな単語文字列のリストに分割しようとしています。私の現在のプログラム:
main = do
putStrLn "Insert a string to convert: "
-- Input string
line <- getLine
words line;
しかし、この場合、IO エラーが発生していることがわかります。私の理解では、 getLine はアクションなので、これは不純なので、「行」にバインドする必要があります。Line は、IO String である getLine の正確な表現です。
しかし、 line は文字列であってはいけませんか? オンラインで単語を使用しようとすると、「予想される型 "IO a0" を実際の型 [String] と一致させることができませんでした」と表示されます
行が文字列ではないかのように。さらに、実際の型が正しいかどうかを確認するためにプログラムを作成するときに、プログラム自体で :t 行を使用できますか?
初心者の質問で申し訳ありませんが、少し行き詰まっています。
編集:
私はGHCIで似たようなことをしました.それは私の型が実際には通常の文字列であることを教えてくれます..私はそれを理解していません.
Prelude> line <- getLine
"Hello fellows"
Prelude> :t line
line :: String
Prelude> words line
["Hello","fellows"]
なぜそれがうまくいかないのですか?