.
До сих пор мы давали частично применённым функциям имена, после чего добавляли недостающие параметры, чтобы всё-таки посмотреть на результаты. Однако мы ни разу не попробовали напечатать сами функции. Попробуем? Что произойдёт, если мы попробуем выполнить >multThree 3 4
в GHCi вместо привязки к имени с помощью ключевого слова >let
либо передачи другой функции?
>ghci> multThree 3 4
>:1:0:
> No instance for (Show (a –> a))
> arising from a use of `print' at :1:0–12
> Possible fix: add an instance declaration for (Show (a –> a))
> In the expression: print it
> In a 'do' expression: print it
GHCi сообщает нам, что выражение порождает функцию типа >a –> a
, но он не знает, как вывести её на экран. Функции не имеют экземпляра класса >Show
, так что мы не можем получить точное строковое представление функций. Когда мы вводим, скажем, >1 + 1
в терминале GHCi, он сначала вычисляет результат (>2
), а затем вызывает функцию >show
для >2
, чтобы получить текстовое представление этого числа. Текстовое представление >2
– это строка >"2"
, которая и выводится на экран.
ПРИМЕЧАНИЕ. Удостоверьтесь в том, что вы поняли, как работает каррирование и частичное применение функций, поскольку эти понятия очень важны.