Tôi đã đọc về một số vấn đề với bản ghi Haskell, đặc biệt, thực tế là hai phần tử trong cùng một mô-đun không thể có cùng tên.Bản ghi Haskell, cách tiếp cận rõ ràng hơn?
Tôi hiểu bạn có thể làm việc này bằng cách có các module riêng biệt, nhưng tôi không muốn làm điều đó và thay vào đó cố gắng tiếp cận này:
class HasX a where
x :: a -> X
data D1 = D1 { d1_x :: X, ... }
instance HasX D1 where
x = d1_x
data D2 = D2 { d2_x :: X, ... }
instance HasX D2 where
x = d2_x
(này chỉ làm được, chứ không phải bộ, tôi muốn tất nhiên cần phải viết thêm mã để làm bộ).
Tuy nhiên, có vẻ như các khai báo lớp và thể hiện cho tất cả điều này có vẻ giống như bản mẫu soạn sẵn mà có thể được loại bỏ, sử dụng mẫu haskell hoặc một thứ khác.
Có thư viện hoặc phần mở rộng nào cho GHC khiến cho cách tiếp cận này ít lộn xộn hơn không?
Có, oops. Đã sửa. – Clinton
Hơi phức tạp hơn một chút vì hai trường có thể không có cùng loại. – augustss
Vì mục đích của tôi, giả sử các trường có cùng tên có cùng loại. Tôi sẽ không có các trường có cùng tên với các loại khác nhau. – Clinton