Вопрос 1Haskell: не понимая «Нет инстанс» сообщений об ошибках в GHCI
Привет, если в WinGHCi я намеренно сделать следующий неправильный фрагмент кода:
3 4
Тогда сообщение об ошибке I get is
<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
?
Wow большое спасибо за это подробное и хорошо изложенное объяснение; Я очень ценю это. Я думаю, мне нужно будет ударить по некоторым книгам, указанным на веб-сайте Haskell, и вернуться к вашему сообщению еще несколько раз, прежде чем я перевариваю все, что вы написали. Спасибо. – artella