Haskell で IO を扱います。逐次的に書けます。
main = putStrLn "Hello World!"ここで型は以下のように定義されています。
putStrLn :: String -> IO ()
main = do somethingDo anythingDo一番シンプルな例
main = do return ()この文脈で return を使うと do は IO にかかっているので、 return () で IO () を返します。 上記の関数は実際には何もしません。
main = do getLinegetLine :: IO String なので、この do の中に書くことができます。
main = do line <- getLine putStrLn line
line <- getLine では getLine を line に束縛しています。 ここで line :: String になっています。
getLine :: IO String から IO を外したものが束縛された line の型になります。
line :: String なので、putStrLn :: String -> IO () の引数として渡すことができます。
今回は標準入出力を扱うだけのものすごく単純な例を丁寧に解説しました。
正しく基本を理解して拡張していけば、ファイルを読み書きするコードやもっと複雑なコードも理解できるようになるはずです。