стандарте языка хаскель, а значит, думаю, есть и в самом хаскель.
Когда я просто объявляю тип переменной Int - какой из этих 3 инстансов по умолчанию подставляется?
Могу ли я как то объявить переменную, указав что у меня не просто int, а int, рождённый в соответствии с тайпклассом real?
классы в ооп != классы в хаскеле
Я тоже новичок, но позволю себе попробовать ответить на ваш вопрос. Насколько я понимаю, невыделенные жирным шрифтом типы — это типы которые имеют свойства данного класса. То есть классы в хаскеле подобны не строгим биологическим классам, а “роду” в философском смысле — “кто умеет летать? — птицы, насекомые, некоторые млекопитающие — ага, записываем их в класс крылатых”
Отвечу "по существу" конкретно на этот вопрос. Для того, чтобы быть инстансом Real, тип Int должен содержать реализацию функции toRational. Оно есть тут https://hackage.haskell.org/package/base-4.16.0.0/docs/src/GHC.Real.html -- | @since 2.0.1 instance Real Int where toRational x = toInteger x :% 1 Для того, чтобы быть инстансом Integral, тип Int должен содержать реализации других функций, их список идёт сразу по ссылке выше, instance Integral Int where toInteger (I# i) = Int# -> Integer IS i и дальше вниз. Соответственно, когда ты пишешь Int, ты используешь тип, который УЖЕ является инстансами всех этих классов, а не инстансами какого-то подмножества.
Спасибо. Сегодня к концу дня до этого дошел
Обсуждают сегодня