Haskell - 文法 - ブロックとレイアウト
1. 概要 複数の実行文を書くには、「{」~「}」で囲んで、「;」で区切る、「C言語」のようなタイプと、ネストによって区切る「Python」のようなタイプの両方が使えるようです。 「C言語」のようなタイプを「ブロック」、「Python」のようなタイプを「レイアウト」というようです。 2. ブロック ブロックの例を、参考サイトのように書くと main = do { putStr "Hello"; putStrLn " World!" } てな感じになりますが、末尾の実行文だけは、「;」をつけないってのがなじめませんな。 「{」~「}」で囲んでいるので、カラム位置は気にしないでいいわけで main = do { putStr "Hello"; putStrLn " World!" } さらに、「do」の後に続くものを 1行で書くならば、「{」~「}」もいらないそうで main = do putStr "Hello"; putStrLn " World!" と書くこともできるのだそうな。 上記 3 ソースは、すべて支障なく、コンパイルできて、実行結果も同一でした。 「do」のようなもの(?)に「where」「let」「of」があるそうで・・・覚えられるかしら・・・。 3. レイアウト 前項のような複数の実行文を改行しつつ、同一のネストで書くのが、レイアウトだそうで。 main = do putStr "Hello" putStrLn " World!" ここ不思議というかなんというか、「do」の後の実行文のネストが同一であればいいそうで main = do putStr "Hello" putStrLn " World!" と書くこともできる。 さらに、「引数」(?)も改行してネストさせられるそうで・・・。 main = do putStr "Hello" putStrLn " World!" と書くことも可能。 これまた、上記 3 ソースは、すべて支障なく、コンパイルできて、実行結果も同一(前項とも同一)でした。 注意すべきは、これ全て空白は、半角スペースで、タブで飛ばしてはいけない。 タブで文字数を合わせれば、いけるのかどうかは、まだやってみていません(2020年7月28日)。
main = do { putStr "Hello"; putStrLn " World!" }
main = do putStr "Hello"; putStrLn " World!"
main = do putStr "Hello" putStrLn " World!"