6.2.16. Do And If Then Else

DoAndIfThenElse
Since:

7.0.1

Status:

Included in Haskell2010

Allow semicolons in if expressions.

Normally, a conditional is written like this: if cond then expr1 else expr2. With the extension DoAndIfThenElse, semicolons are allowed before the then and also before the else, allowing if cond; then expr1; else expr2. (You can also include either semicolon on its own.)

Allowing semicolons in the middle of a conditional is useful in connection with layout-controlled blocks, like do-blocks. This is because GHC invisibly inserts a semicolon between each line of a layout-controlled block. Accordingly, with DoAndIfThenElse, we can write code like this

f mb x y = do
  b <- mb
  if b
  then x
  else y

Without DoAndIfThenElse, the then and else lines would have to be indented with respect to the rest of the lines in the do-block.