Một số chiếc nhẫn có thể được trang bị với một chức năng tiêu chuẩn:Haskell Hạn chế là không nhỏ hơn so với đầu dụ
class (Ring.C a) => EuclideanDomain a where
norm :: a -> Integer
Với chức năng này, chiếc nhẫn có thể được sắp xếp theo một cách rõ ràng:
compare x y = compare (norm x) (norm y)
Nhưng tôi không chắc chắn làm thế nào để chỉ ra điều này. Tôi cố gắng để làm
instance (EuclideanDomain a, Eq a) => Ord a where
nhưng điều này mang lại cho tôi một số cảnh báo, và khi tôi cho phép cờ biên dịch có liên quan nó nói với tôi "Hạn chế là không nhỏ hơn so với đầu dụ" - nếu tôi bật UndecidableInstances tất cả mọi thứ đi vào địa ngục.
Có cách nào để làm những gì tôi muốn không?
Có nghĩa là gì đối với các ràng buộc nhỏ hơn? Chắc chắn có ít 'EuclideanDomain a' sau đó có 'a' s? – Xodarap
@Xodarap: Nhỏ hơn như trong "được bao bọc trong các trình tạo kiểu ít hơn", không giống như "ít giá trị của loại này" hơn. – hammar
Tôi hiểu. Khi tôi thử những gì bạn đặt ở đây và sau đó 'f :: EuclideanDomain a => a -> Thứ tự',' f x = so sánh x x' nó không biên dịch. Tôi đang thiếu gì? – Xodarap