AP
Size: a a a
AP
AP
[
I
AP
AP
AP
AP
R
main :: IO ()Программа 2:
main = interact f
f :: String -> String
f s = s
main :: IO ()Эти программы ведут себя по-разному - первая программа выводит вводимые строчки по мере поступления, а вторая после окончания ввода.
main = interact f
f :: String -> String
f s = reverse (reverse s)
f абсолютно эквивалентны на конечных строках.f два раза реверснул строку, имеет сайд-эффекты?f :: String -> String?R
AR
AR
interact :: (String -> String) -> IO ()
interact на вход принимает лишь чистые функции.AR
AR
f выше, это выполняется.AR
interact будет меняться порядок потребления ввода.R
processEvents :: [InputAction] -> [OutputAction]requireRandom, после чего из списка-аргумента первым элементом берём сгенерированное число, как-будто оно всегда там лежало, и так далее.processEvents input = [requireRandom, "Случайное число: " ++ head input]O
R