Если вы определите функцию без явной сигнатуры типа, Haskell выведет наиболее общую. Если вы не уверены, это самый простой способ выяснить, как будет читаться ваше определение; затем вы можете скопировать его в свой исходный код. Распространенной ошибкой является неправильный ввод функции, а затем получение ошибочной ошибки типа где-то еще.
В любом случае, вы можете получить информацию о классе Num
, набрав :i Num
в ghci или читая документацию. Класс Num
дает вам +
, *
, -
, negate
, abs
, signum
, fromInteger
, а также все функции Eq
и Show
. Обратите внимание, что <
и >
там нет! Требование значений Num
и попытка их сравнения на самом деле приведут к ошибке типа - сравнивать можно не все виды.
Так что это должно быть Ord a => ...
, так как Num a => ...
выдаст ошибку типа, если вы попробуете это.