レイアウト

do式を使って複数の式を書く時にはインデントを揃えていました。インデントを使う以外にも{ }と;を使って書くこともできます。

オフサイドラインはdo等のあとに現れる単語の位置によって決まるので、以下のどちらの書き方も可能です。

main = do cs <- getContents
          putStr cs
main = do
  cs <- getContents
  putStr cs

あと、式の継続というのがあって、オフサイドラインよりも深くインデントすると前の行の続きになるというルールがあるそうです。

main = do cs <- 
            getContents
          putStr cs

こう書くとgetContentsは前の行の続きになると。