Trong Haskell, chúng tôi có khả năng kết hợp các ràng buộc trên các loại với một lôgic và.Làm cách nào để kết hợp hai loại ràng buộc với một lôgic hoặc trong Haskell?
Hãy xem xét những điều sau
type And (a :: Constraint) b = (a, b)
hoặc phức tạp hơn
class (a, b) => And a b
instance (a, b) => And a b
Tôi muốn biết làm thế nào để hợp lý hoặc hai khó khăn cùng nhau trong Haskell.
Cố gắng gần nhất của tôi là điều này, nhưng nó không hoạt động. Trong lần thử này, tôi sửa lại các ràng buộc kiểu với các thẻ và hơn là xác định chúng với các tham số ngầm định.
data ROr a b where
L :: a => ROr a b
R :: b => ROr a b
type Or a b = (?choose :: ROr a b)
y :: Or (a ~ Integer) (Bool ~ Integer) => a
y = case ?choose of
L -> 4
x :: Integer
x = let ?choose = L in y
Nó hầu như hoạt động, nhưng người dùng phải áp dụng phần cuối cùng và trình biên dịch nên làm điều đó cho tôi. Đồng thời, trường hợp này không cho phép người ta chọn lựa chọn thứ ba khi cả hai ràng buộc đều được thỏa mãn.
Làm cách nào để hợp lý hoặc hai ràng buộc với nhau?
Còn gì? Nó sẽ cho phép bạn phân biệt khi cả hai đều hài lòng. –