Вопрос 1
Привет, если в WinGHCi я намеренно делаю следующий неправильный фрагмент кода:
3 4
Тогда сообщение об ошибке, которое я получаю,
<interactive>:1:1:
No instance for (Num (a0 -> t0))
arising from the literal `3'
Possible fix: add an instance declaration for (Num (a0 -> t0))
In the expression: 3
In the expression: 3 4
In an equation for `it': it = 3 4
Что означает No instance for (Num (a0 -> t0))
?
Вопрос 2
Почему следующий фрагмент кода:
(+) 2 3 4
<interactive>:1:7:
No instance for (Num (a0 -> t0))
arising from the literal `3'
Possible fix: add an instance declaration for (Num (a0 -> t0))
In the second argument of `(+)', namely `3'
In the expression: (+) 2 3 4
In an equation for `it': it = (+) 2 3 4
вывести несколько другую ошибку из второго фрагмента кода:
2+3 4
<interactive>:1:3:
No instance for (Num (a1 -> a0))
arising from the literal `3'
Possible fix: add an instance declaration for (Num (a1 -> a0))
In the expression: 3
In the second argument of `(+)', namely `3 4'
In the expression: 2 + 3 4
А именно, в первом фрагменте кода No instance for (Num (a0 -> t0))
, где, как и во втором фрагменте кода, No instance for (Num (a1 -> a0))
.
[Ответ на ehird]
(вопросы переместились из комментариев ответа):
1) Я понимаю, что последние два выражения отличаются друг от друга, но вы говорите, что я не должен пытаться понять, почему интерпретатор выбирает (Num (a0 -> t0))
для первого и (Num(a1 -> a0))
для последнего, кроме того, что они разные
2) Привет, а с первым, когда вы говорите "Но нет экземпляра Num для функций", что вы имеете в виду? Извините, я не понимаю, что такое понятие экземпляра. Кроме того, просто из любопытства вы могли бы использовать свой метод экземпляра Num (a -> b)
, чтобы каким-то образом интерпретировать интерпретатор 3 4
как 4 modulo 3
?