Мне было интересно узнать об объявлении экземпляра Ord
для (a,b)
, и я хотел бы быстро просмотреть хакеры, чтобы подтвердить мою интуицию, что сравнение сначала на a
, а затем, в случае равенства, на b
. В частности я пошел here. Поскольку хакеры имеют ссылки на исходный код для деклараций и функций данных, я предположил, что также будет исходный код для деклараций экземпляра, но я не могу их найти. Есть ли причина, почему их там нет, или я просто не выглядел достаточно сложно? type Answer = Either Explanation Directions
:)Исходный код для стандартных экземпляров экземпляра typeclass
ответ
Я пошел looking in the Prelude, нажал на source link for the Ord
typeclass, прокручивать вниз немного, и обнаружил, что она определяется как
deriving instance (Ord a, Ord b) => Ord (a, b)
Он использует расширение StandaloneDeriving. В основном это генерируя тот же код, как если бы тип был определен как
data (a, b) = (a, b) deriving Ord
The Ord
например, для кортежей is derived, в соответствии с правилами из спецификации языка, которая восходит as far as Gofer.
instance (Eq a, Eq b) => Eq (a,b) where
(x,y) == (u,v) = x==u && y==v
instance (Ord a, Ord b) => Ord (a,b) where
(x,y) <= (u,v) = x<u || (x==u && y<=v)
Haskell 98 определяет это in section 10.1:
методы класса автоматически введенных производных экземпляров уравнения и Ord являются (==), (/ =), сравните, (<) , (< =), (>), (> =), max и min. Последние семь операторов определены так, чтобы сравнить их аргументы лексикографически относительно установленного набора конструкторов, с более ранними конструкторами в объявлении типа данных, считая меньше, чем более поздние.
Производные сравнения всегда пересекают конструкторы слева направо.
...
Все производные операции класса уравнения и Ord являются строгими в обоих аргументов.
- 1. Исходный код для отладки нескольких экземпляров приложения
- 2. Многопараметрические объявления экземпляра typeclass
- 3. SmallCheck: Создание экземпляров экземпляров typeclass Последовательный
- 4. Исходный код источника экземпляров календаря?
- 5. Разрешение неявного для экземпляра Typeclass `Show`
- 6. Автоматическое распознавание типов при использовании экземпляров typeclass?
- 7. Вывод обычного экземпляра typeclass из серии меньших?
- 8. Создание экземпляра Typeclass с `implicit def`?
- 9. Исходный код для Android Исходный код
- 10. Меньше избыточный способ создания экземпляров «кругового» перечисления typeclass
- 11. Исходный код для demokit
- 12. Исходный код для str.split?
- 13. Исходный код для lccs_10_3Beta.swc
- 14. Исходный код для java.lang.Object
- 15. Лазурные сайты - несколько стандартных экземпляров, возможно?
- 16. Тип Ограничения в Typeclass
- 17. Количество экземпляров экземпляра Backend
- 18. Код Python для создания нескольких экземпляров
- 19. Открытый исходный код браузера
- 20. Java - метод экземпляра для определенных общих экземпляров
- 21. XCode newbie: Как найти исходный код для стандартных или системных библиотек?
- 22. Где я могу найти исходный код для всех стандартных библиотек C?
- 23. Почему я не могу предоставить тип внутри экземпляра typeclass?
- 24. Matab код tlc для s-функций, имеющих несколько экземпляров
- 25. Как мне сопоставлять типы, не имеющие определенного экземпляра typeclass?
- 26. Удаление экземпляра типа typeclass и политики версии пакета
- 27. Код Dll для C исходный код
- 28. Код Сравнить для VBA Исходный код
- 29. Как создать экземпляры typeclass для продвигаемого типа?
- 30. Исходный код доступен для System.Xml.Linq.XNode?
Существует открытый билет [добавить ссылки источника для экземпляров] (http://trac.haskell.org/haddock/ticket/145) в Haddock, что упростит поиск экземпляров. – hammar
Большое спасибо. Все хорошие ответы, каждая из которых содержит немного дополнительной информации, которая делает их отличными от других. – Boris