Aplicação sistemática de uma função a todos os campos de um registro haskell

Eu tenho um registro com campos de tipos diferentes e uma função que é aplicável a todos esses tipos. Como um pequeno exemplo (bobo):

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

Digamos, eu quero definir uma função que adicione dois registros por campo:

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

Existe uma maneira de expressar isso sem repetir a operação para todos os campos (pode haver muitos campos no registro)?

Na realidade, eu tenho um registro composto exclusivamente porMaybe campos, e quero combinar os dados reais com um registro contendo valores padrão para alguns dos campos, a serem usados quando os dados reais foremNothing.

(Acho que deveria ser possível com o haskell de modelo, mas estou mais interessado em uma implementação "portátil".)

questionAnswers(4)

yourAnswerToTheQuestion