Я просматриваю учебник по хаскелю (Узнайте хаскел во благо), и я играл с этим кодом, который я написал на основе одной из функций в книге.
reverseNum :: (Num a) => a -> a
reverseNum 123 = 321
reverseNum x = 0
и ghci говорит мне, что он не может вывести (Eq a) из (Num a).
Поэтому я меняю первую строку на это
reverseNum :: (Integral a) => a -> a
и это сработало. Это было странно, потому что я думал, что, будучи частью класса типов Num, вы также должны быть частью Eq.
Я попробовал еще одну вещь, чтобы удовлетворить свое любопытство, и изменил первые 2 строки на это
reverseNum :: (Floating a) => a -> a
reverseNum 1.0 = 0.1
и это дало мне ту же ошибку.
Я знаю, что вы можете исправить это, выполнив что-то вроде reverseNum :: (Num a, Eq a) ...
, но я хочу знать, почему Integral является единственным, где можно вывести Eq. Почему это?
P.S. Я действительно новичок в haskell, так что... будьте нежны :)