Хотя мне кажется, что я хорошо понимаю Haskel IO и Monads, мне трудно понять следующее сообщение об ошибке.
Рассмотрим следующую простую функцию в Haskell
testf :: Show a => a -> String
testf x = show x
Я попытался реализовать вариант, который печатает на консоль с помощью моно ввода-вывода
printtoscreen :: Show a => a -> IO()
printtoscreen x = putStrLn . show x
Однако это приводит к следующей ошибке:
Не удалось сопоставить тип '[Char]' с 'a0 -> String' Ожидаемый тип: a0 -> String Фактический тип: String
В правильной версии следует явно указать параметр x
printtoscreen :: Show a => a -> IO()
printtoscreen = putStrLn . show
.
Я понимаю, почему работает последний фрагмент кода, но я не могу понять смысл сообщения об ошибке второго фрагмента кода, учитывая, что он также вернет строку в putStrLn
Так почему Параметр x
опустить в варианте IO()
?