Có, tôi biết rằng UndecidableInstances
có thể không tốt. Tôi thực sự đã cố gắng hết sức để thiết kế mô-đun của mình để không cần đến nó, tuy nhiên tôi có một cái gì đó như thế này:Cách sử dụng UndecidableInstances cục bộ?
instance Foo x (C x y) => Bar (C x y) where
...
và thay đổi nó sẽ làm cho API xấu hơn đáng kể. Tôi không bao giờ lấy được Foo
trong số Bar
để không có cách nào tạo vòng lặp.
Mặt khác, kích hoạt UndecidableInstances
làm cho những sai lầm ngớ ngẩn dễ bị bỏ qua. Ví dụ: tôi có thể viết nhầm một số điều như:
instance Foo x (C x z) => Bar (C x y) where
...
nơi z
không bao giờ xuất hiện ở bên phải.
Câu hỏi: Có thể sử dụng UndecidableInstances
cục bộ trong mô-đun, tức là đánh dấu rõ ràng các địa điểm mà quy tắc chấm dứt thông thường được dỡ bỏ không?
Tất nhiên nó sẽ không giúp chấm dứt, nhưng nó sẽ đưa ra quyết định sử dụng phần mở rộng này thông tin hơn.
Câu hỏi 2: Có điều gì yếu hơn UndecidableInstances
vẫn không đảm bảo chấm dứt, nhưng sẽ cấm một số trường hợp đường biên hơn như đoạn mã thứ hai?