Функция 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 позволяет выполнить заданное действие в случае, если некоторое условие истинно, и ничего не делать в противном случае.