Итак, у меня есть очень простая функция, которая принимает два параметра: первый - это час (между 0 и 23), а второй - минута (между 0 и 59). Эта функция возвращает час плюс одна минута и форматирует час в красивом стиле. Например, hour 11 12
return 11 heures et 13 minutes
. Извините за французский формат часа.
Итак, я использую в этой функции функцию show
, а параметры должны быть числом, поэтому у меня есть объявление типа (Num a, Show a) => a -> a -> String
. Но, когда я пытаюсь выполнить эту функцию, у меня появилась ошибка, и GHC сказал мне добавить ограничение типа Eq
, но я не понимаю, зачем мне нужно ограничение типа Eq
в этом случае. Есть код (опять же, извините за французский текст, используемый в функции, но я думаю, что это не очень важно, если вы не понимаете имя функции и текст):
heure :: (Num a, Eq a, Show a) => a -> a -> String
heure 23 59 = "Minuit"
heure 12 m = "Midi et " ++ show (m+1) ++ " minutes"
heure h 59 = show (h+1) ++ " heures"
heure h m = show h ++ " heures et " ++ show (m+1) ++ " minutes"
Итак: если я не использую Eq
, у меня есть ошибка, и когда я его использую, мой код верен. Почему?
Спасибо за ваши объяснения!