Tôi phải xác định loại loại Truthy
có chứa phương thức true
chuyển đổi phiên bản loại thành giá trị Bool
.Làm thế nào để viết một thể hiện cho tất cả các loại trong lớp loại khác?
loại của tôi khai báo lớp:
class Truthy a where
true :: a -> Bool
Tiếp theo, tôi phải xác định các trường hợp của lớp này với nhiều loại khác nhau, bao gồm danh sách và các loại số. Tôi đã làm nó cho danh sách và Int
s, nhưng có cách nào để làm điều đó cho tất cả các loại số cùng một lúc?
Dựa trên tuyên bố Int tôi:
instance Truthy Int where
true = (/=) 0
Tôi đã thử thêm kiểu lớp hạn chế, nhưng nó không hoạt động:
instance (Num a) => (Truthy a) where
true = (/=) 0::a
Nếu có một cách để làm điều này tương tự như những gì tôi đã có trong tâm trí, hay tôi nên chỉ xác định nó cho từng loại số một cách riêng biệt?
"hoặc tôi chỉ nên xác định nó cho từng loại số riêng biệt?" - trong một từ ** Có **. Mục tiêu thiết kế của các lớp loại là cho phép quá tải trên cơ sở mỗi loại. Với các phần mở rộng, có thể xác định được các trường hợp "overreaching" nhưng chúng thường là một lỗ hổng thiết kế. –
có thể trùng lặp của [Khai báo tất cả các cá thể của một kiểu chữ là một kiểu chữ khác mà không sửa đổi các khai báo lớp gốc] (http: // stackoverflow.com/questions/8461029/khai báo-tất cả các trường hợp-of-a-typeclass-là-in-khác-typeclass-mà không sửa đổi) –