Mam rekord z polami różnych typów i funkcją, która ma zastosowanie do wszystkich tych typów. Jako małe (głupie) Przykład:Systematyczne stosowanie funkcji do wszystkich pól rekordu haskell
data Rec = Rec { flnum :: Float, intnum :: Int } deriving (Show)
powiedzieć, że chcemy zdefiniować funkcję, która dodaje dwa rekordy na pola:
addR :: Rec -> Rec -> Rec
addR a b = Rec { flnum = (flnum a) + (flnum b), intnum = (intnum a) + (intnum b) }
Czy istnieje sposób, aby wyrazić to bez powtarzania operacji dla każde pole (może być wiele pól w rekordzie)?
W rzeczywistości mam zapis zawierający wyłącznie pola Maybe
i chcę połączyć rzeczywiste dane z rekordem zawierającym wartości domyślne dla niektórych pól, które będą używane, gdy rzeczywiste dane to Nothing
.
(chyba powinno być możliwe z szablonu Haskell, ale jestem bardziej zainteresowany w „Portable” realizacji.)
Jestem obecnie robi to 'zamknięcie' rzeczy; wciąż jest dużo duplikacji. – crosser