Как распечатать вывод функции, которая возвращает строку ввода-вывода в стандартный вывод?
Хорошо, давайте посмотрим.Вот функция, которая возвращает строку ввода-вывода:
dumbFunction :: a -> IO String
dumbFunction x = getLine
dumbFunction
- глупая функция (но, тем не менее, функция!).Он игнорирует свой ввод, а затем возвращает getLine
, который имеет тип IO String
.
Итак, вы скажете мне, как вы печатаете getLine :: IO String
?Ответ - нет!Это то, что мы называем «IO action».Обратите внимание, что действие ввода-вывода - это , а не функция, потому что оно не принимает ввод.(Однако действия ввода-вывода могут получать ввод от операций ввода-вывода, таких как чтение стандартного ввода, как это делает getLine
. Но это не считается «функцией», поскольку она не принимает никаких традиционных входных данных)
Итаквместо того, чтобы распечатывать само действие, вы, вероятно, захотите запустить действие, а затем распечатать результат.Это можно сделать, как описано Даниэлем Фишером (с помощью <-
, который можно рассматривать как оператор «выполнения»).