Tôi có bản ghi với các trường có nhiều loại khác nhau và một hàm có thể áp dụng cho tất cả các loại đó. Là một nhỏ (ngớ ngẩn) ví dụ:Có hệ thống áp dụng một hàm cho tất cả các trường của bản ghi haskell
data Rec = Rec { flnum :: Float, intnum :: Int } deriving (Show)
Say, tôi muốn xác định một chức năng có thêm hai kỷ lục cho mỗi lĩnh vực:
addR :: Rec -> Rec -> Rec
addR a b = Rec { flnum = (flnum a) + (flnum b), intnum = (intnum a) + (intnum b) }
Có một cách để thể hiện điều này mà không lặp lại những hoạt động cho mọi trường (có thể có nhiều trường trong bản ghi)? Trong thực tế, tôi có một bản ghi bao gồm độc quyền các trường Maybe
và tôi muốn kết hợp dữ liệu thực với bản ghi chứa giá trị mặc định cho một số trường, sẽ được sử dụng khi dữ liệu thực tế là Nothing
.
(Tôi đoán nó phải được thể với mẫu Haskell, nhưng tôi quan tâm nhiều hơn trong việc thực hiện "xách tay".)
Tôi hiện đang làm điều 'đóng cửa' này; nó vẫn còn rất nhiều sự trùng lặp. – crosser