Tôi không chắc chắn nếu tiêu đề là mô tả đủ nhưng tôi không phải là rất có kinh nghiệm trong Haskell. Tôi muốn thực hiện một typeclass cho nhà xây dựng kiểu hai tham số mà phụ thuộc vào các loại mà các nhà xây dựng được parametrized, nhưDeconstruction loại trong định nghĩa typeclass (Haskell)
class MyTypeclass (ctor a b) where
funct :: (ctor a b) -> a
(giả sử ctor :: * -> * -> *
, a :: *
, b :: *
) và, giả sử tôi có một
data Pair a b = Pair a b
có thể làm một cái gì đó giống như
instance MyTypeclass (Pair a b) where
funct :: Pair a b -> a
funct (Pair x _) = x
là nó có thể không có nhiều lớp kiểu tham số (vì nó' s quá mạnh mẽ - Tôi chỉ muốn deconstruct loại typeclass của tôi là parametrized bởi)?
Cảm ơn! Nó hoạt động. Nhưng tôi khá lo lắng về số lượng suy luận kiểu xảy ra ở đó - làm thế nào tôi có thể tạo ra hai tham số typeclass với hai lớp constructor? Tôi cần một cách để xác định loại nào đến từ đâu. –
Không chắc tôi hiểu mối quan tâm của bạn - nhưng hãy nhớ: Biến lớp (ở đây 'ctor') phải xuất hiện trong mọi chữ ký hàm lớp, và nó phải được áp dụng cho số đối số kiểu đúng. Do đó tất cả các loại được cố định máng đầu vào. – Ingo
Câu hỏi đơn giản hơn sau đó: bạn có thể cho chữ ký rõ ràng của 'funct' bên trong' instance C Pair where'? –