Pytanie 1Haskell: zrozumienie "No instancji dla" komunikatów o błędach w ghci
Cześć, jeśli w WinGHCi ja celowo zrobić następujące złego kawałek kodu:
3 4
Następnie komunikat o błędzie I get jest
<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
Co dokładnie oznacza No instance for (Num (a0 -> t0))
?
Pytanie 2
Dlaczego następujący fragment kodu:
(+) 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
dochodowości nieco inny błąd z drugiego kawałka kodu:
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
Mianowicie w pierwszym kawałek kodu mamy No instance for (Num (a0 -> t0))
gdzie jak w drugim kawałku kodu mamy No instance for (Num (a1 -> a0))
.
[Response to ehird]
(Pytania przeniesiony z komentarzy odpowiedź):
1) Doceniam te ostatnie dwa wyrażenia są różne, ale mówisz, że nie powinniśmy próbować zrozumieć dlaczego tłumacz wybiera (Num (a0 -> t0))
dla tych pierwszych i (Num(a1 -> a0))
dla tych ostatnich, poza tym, że są one różne?
2) Cześć, a przy pierwszym, gdy mówisz "Ale nie ma instancji Num dla funkcji", co masz na myśli? Niestety, nie jestem pewien, na czym polega koncepcja danej instancji. Co więcej, z czystej ciekawości, mógłbyś użyć metody instancji Num (a -> b)
, aby jakoś powiedzieć tłumaczowi, aby interpretował 3 4
jako 4 modulo 3
?
Wow, dziękuję bardzo za to szczegółowe i dobrze opisane wyjaśnienie; Bardzo to doceniam. Myślę, że będę musiał uderzyć w niektóre książki wyszczególnione na stronie Haskell i powrócić do twojego postu jeszcze kilka razy, zanim strawię wszystko, co napisałeś. Dziękuję Ci. – artella