Haskell - 文法 - ブロックとレイアウト

クラウディア 
1. 概要
2. ブロック
3. レイアウト

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日)。
earthcar(アースカー)