Систематическое применение функции ко всем полям записи в Haskell

У меня есть запись с полями разных типов и функция, которая применима ко всем этим типам. В качестве небольшого (глупого) примера:

data Rec = Rec  { flnum :: Float, intnum :: Int } deriving (Show)

Скажем, я хочу определить функцию, которая добавляет две записи для каждого поля:

addR :: Rec -> Rec -> Rec
addR a b = Rec { flnum = (flnum a) + (flnum b), intnum = (intnum a) + (intnum b) }

Есть ли способ выразить это без повторения операции для каждого поля (в записи может быть много полей)?

На самом деле у меня есть запись, состоящая исключительно изMaybe поля, и я хочу объединить фактические данные с записью, содержащей значения по умолчанию для некоторых полей, которые будут использоваться, когда фактические данные былиNothing.

(Я думаю, это должно быть возможно с шаблоном haskell, но меня больше интересует «переносимая» реализация.)

Ответы на вопрос(4)

Ваш ответ на вопрос