Haskellのdoの中のif式のインデント
Haskellについて調べていたら、do の中の if 式の then と else は if よりもインデントを深くする必要があるという情報があった。手元で試す限り、if, then, elseを揃えても特にエラーにならない。仕様が変わったのだろうか。もしかしたらと思い、-Wall をつけるも警告などは表示されなかった。
試したコード:
main :: IO () main = do if True then putStrLn "true" else putStrLn "false"
実行結果です。
% ghc --version The Glorious Glasgow Haskell Compilation System, version 7.4.1 % runghc -Wall a.hs true
調べると、以下のページを見つけました。
上記ページのPDFを読むと、なぜ「doの中のif」なのかが分かりやすく書かれてあります。doの中で、if, then, elseのインデントを揃えてても問題なく動くのは、ifを3つの式から構成されるものとして扱うことにしたためらしい。ひとまずは、何が問題になっているかを把握することが出来てよかった。