Tôi có một số khó khăn để hiểu khi sử dụng và khi không sử dụng typeclass trong mã của tôi. Tôi có nghĩa là tự tạo của riêng mình và không sử dụng sử dụng đã được xác định là máy đánh chữ, tất nhiên. Ví dụ (ví dụ rất ngu ngốc), tôi nên làm:Tôi có nên sử dụng typeclasses hay không?
data Cars = Brakes | Wheels | Engine
data Computers = Processor | RAM | HardDrive
class Repairable a where
is_reparaible :: a -> Bool
instance Repairable Cars where
is_repairable (Brakes) = True
is_repairable (Wheels) = False
is_repairable (Engine) = False
instance Repairable Computers where
is_repairable (Processor) = False
is_repairable (RAM) = False
is_repairable (HardDrive) = True
checkState :: (Reparaible a) => a -> ...
checkState a = ...
(Rõ ràng, đây là một ví dụ ngu ngốc, không đầy đủ).
Nhưng điều này là rất nhiều cho một ít sử dụng, không? Tại sao tôi không nên làm một cái gì đó đơn giản và chỉ định nghĩa các hàm mà không định nghĩa các kiểu dữ liệu mới và các kiểu chữ (với các cá thể của chúng).
Ví dụ này quá đơn giản, nhưng trong thực tế tôi thường thấy những thứ như thế (kiểu dữ liệu mới + kiểu chữ + trường hợp) khi tôi duyệt mã Haskell trên github thay vì chỉ định nghĩa hàm.
Vì vậy, khi tôi nên tạo kiểu dữ liệu mới, typeclasses vv và khi nào tôi nên sử dụng chức năng?
Cảm ơn.
Vâng! Đây là một câu trả lời rất hoàn chỉnh, cảm ơn bạn rất nhiều! "Bạn không sử dụng các lớp loại nếu ..." sẽ hữu ích để chọn cách tốt để làm điều gì đó. – vildric
Tôi sẽ thêm vào điều này "không sử dụng typeclasses chỉ cho một phương pháp", mặc dù đây không phải là một quy tắc hoàn toàn cứng nhắc, giống như một gợi ý chung. – MathematicalOrchid
@MathematicalOrchid Đó là một phần của quy tắc "nhu cầu luật" vì bạn hiếm khi có luật cho một loại lớp chỉ với một phương pháp (ngoại trừ một cái gì đó như 'SemiGroup', nơi bạn có luật liên kết) –