2010-12-16 27 views
8

Tôi có typeclass sau đó mô hình một truy vấn tối ưu hóa SQL như:trường Haskell chồng chéo và chức năng loại

class OptimizableQuery q where 
    type Optimized q :: * 
    optimize :: q -> Optimized q 

instance Query q => OptimizableQuery q where 
    type Optimized q = q 
    optimize q = q 

instance (Query q, OptimizableQuery q) => OptimizableQuery (Select (Select q p) p) where 
    type Optimized (Select (Select q p) p) = Select (Optimized q) p 
    optimize (Select (Select q _) p) = Select (optimize q) p 

vấn đề là tôi nhận được lỗi "khai báo Ví dụ gia đình mâu thuẫn" trên chức năng loại tối ưu. Tại sao điều đó và làm thế nào tôi có thể giải quyết nó? Sẽ thật tuyệt khi có một "trường hợp dự phòng" thay vì phải loại bỏ tất cả các trường hợp (có thể là khá nhiều) ...

Trả lời

7

Đó là bất hợp pháp khi có các trường hợp trùng lặp với các họ loại. Xem GHC manual, "Trùng lặp các loại từ đồng nghĩa loại" để biết chi tiết.

Lý do là có hai kết quả có thể khác nhau cho một ứng dụng chức năng kiểu tùy thuộc vào các trường hợp có sẵn có thể dẫn đến sự bất ổn.

+0

Làm cách nào để giải quyết vấn đề này? –

+0

Tôi không thể nghĩ ra bất kỳ giải pháp nào ngoài việc loại bỏ tất cả các trường hợp. Lấy làm tiếc! –

Các vấn đề liên quan