Функция when

Функция when находится в модуле Control.Monad (чтобы к ней обратиться, воспользуйтесь import Control.Monad). Она интересна, потому что выглядит как оператор управления ходом вычислений, но на самом деле это обычная функция. Она принимает булевское значение и действие ввода-вывода. Если булевское значение истинно, она возвращает второй параметр – действие ввода-вывода. Если первый параметр ложен, функция возвращает return (), то есть пустое действие.

Напишем программу, которая запрашивает строку текста и, если строка равна «РЫБА-МЕЧ», печатает её:

import Control.Monad

main = do

   input <- getLine

   when (input == "РЫБА-МЕЧ") $ do

      putStrLn input

Без when нам понадобилось бы написать нечто такое:

main = do

   input <- getLine

   if (input == "РЫБА-МЕЧ")

      then putStrLn input

      else return ()

Как вы видите, функция when позволяет выполнить заданное действие в случае, если некоторое условие истинно, и ничего не делать в противном случае.