Например, у меня есть
data ShipDesign = ShipDesign {
offense :: Offense
, defense :: Defense
, maxHealth :: Integer
, repairRate :: Integer
, stealth :: Integer
, radar :: Integer
, speed :: Integer
, shipType :: String
...
}
Теперь я хочу изменить защиту. Известный способ сделать это:
changeDefense :: (Defense -> Defense) -> ShipDesign -> ShipDesign
changeDefense fDef [email protected](ShipDesign o d m rr s r sp st ...) = ShipDesign o (fDef d) m rr s r sp st ...
который не является элегантным. Особенно в играх его общий для изменения всего нескольких значений за шаг.
Мой вопрос: есть ли библиотека, шаблон дизайна или другой способ изменить одно значение более элегантным образом?