Tôi đã tự hỏi về khai báo cá thể Ord
cho (a,b)
và tôi muốn tìm kiếm nhanh chóng để xác nhận trực giác của mình rằng so sánh đầu tiên là a
và sau đó, trong trường hợp bình đẳng, trên b
. Cụ thể tôi đã đi here. Kể từ khi hackage có liên kết đến mã nguồn cho khai báo dữ liệu và chức năng, tôi giả định rằng cũng sẽ có mã nguồn cho khai báo dụ, nhưng tôi không thể tìm thấy chúng. Có lý do tại sao họ không có ở đó, hoặc có tôi chỉ nhìn không đủ cứng? type Answer = Either Explanation Directions
:)Mã nguồn cho khai báo cá thể kiểu chữ tiêu chuẩn
Trả lời
tôi đã đi looking in the Prelude, nhấp vào source link for the Ord
typeclass, cuộn xuống một chút, và thấy rằng nó được định nghĩa như
deriving instance (Ord a, Ord b) => Ord (a, b)
Đó là sử dụng phần mở rộng StandaloneDeriving. Về cơ bản nó tạo mã giống như nếu loại được định nghĩa là
data (a, b) = (a, b) deriving Ord
Các Ord
dụ cho các bộ is derived, theo các quy tắc từ đặc tả ngôn ngữ, mà đi lại 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)
Các Haskell 98 Báo cáo định này in section 10.1:
Các phương pháp lớp tự động được giới thiệu bởi các trường hợp có nguồn gốc của Eq và Ord là (==), (/ =), so sánh, (<) , (< =), (>), (> =), max và min. Bảy toán tử thứ hai được định nghĩa để so sánh các đối số theo từ điển đối với bộ tạo dựng, với các hàm tạo trước đó trong khai báo kiểu dữ liệu là nhỏ hơn các số sau.
So sánh có nguồn gốc luôn luôn vượt qua các nhà thầu từ trái sang phải.
...
Mọi hoạt động có nguồn gốc của lớp Eq và Ord đều nghiêm ngặt trong cả hai đối số.
- 1. Tiêu chuẩn kiểu mã hóa cho Android
- 2. Kiểu mã hóa F # và tiêu chuẩn
- 3. Thêm các ràng buộc kiểu vào ngữ cảnh của khai báo cá thể trong Haskell
- 4. Kiểu mã hóa: Cách cải thiện kiểu mã hóa và tiêu chuẩn tại một công ty
- 5. Nguồn tham chiếu cho báo cáo XUnit chuẩn là gì
- 6. Nhóm của bạn thực thi tiêu chuẩn nào cho việc triển khai mã phiên bản chính?
- 7. Lỗi khi khai báo hàm lambda: khai báo một cá thể đầu tiên
- 8. Tiêu chuẩn cho typedef'ing
- 9. Đặc điểm kiểu tiêu chuẩn cho giá trị sizeof (T)
- 10. Phông chữ web tiêu chuẩn Nhật Bản
- 11. Tiêu chuẩn mã hóa cho MVC - Chúng có phải là tiêu chuẩn chính thức không?
- 12. Có thể có một cá thể kiểu chữ "cục bộ" không?
- 13. Tiêu chuẩn mã hóa mục tiêu-C?
- 14. mã nguồn cho thư viện chuẩn trong ocaml ở đâu?
- 15. Mẫu Haskell có thể tạo ra các cá thể kiểu chữ nổi đa param không?
- 16. Không thể khai báo các thành viên cá thể trong một lớp tĩnh trong C#
- 17. Ví dụ tự động bắt nguồn sau khi khai báo
- 18. Sử dụng typedef cho mảng để khai báo kiểu mới
- 19. Vui với các loại! Giải quyết nhiều khai báo cá thể
- 20. Tiêu chuẩn cho Clojure?
- 21. Mã hỗ trợ dệt cho mẫu Xử lý tiêu chuẩn?
- 22. Tìm kiểu khai báo của phương thức
- 23. Triển khai giống như mã nguồn mở?
- 24. Tiêu chuẩn mã thoát trong Python
- 25. Tiêu chuẩn mã hóa Haskell tốt
- 26. Thư viện chuẩn của C++ 11 có tiêu đề khai báo chuyển tiếp không?
- 27. Các tiêu chuẩn có nên được chỉ định trong mã nguồn hoặc trong CPPFLAGS không?
- 28. Khai báo kiểu nguyên mẫu "struct" - C
- 29. GUI cho tiêu chuẩn ML?
- 30. ObjectiveC: nơi khai báo các đặc tính cá nhân?
Có một vé mở để [thêm liên kết nguồn cho các trường hợp] (http://trac.haskell.org/haddock/ticket/145) trong Haddock, điều này sẽ giúp việc tìm kiếm các bản sao dễ dàng hơn nhiều. – hammar
Cảm ơn rất nhiều. Tất cả các câu trả lời hay, mỗi câu trả lời đều có thêm một chút thông tin giúp họ nổi bật so với những người khác. – Boris