は例えば、私は大きなオブジェクトの単一の値をエレガントな方法で「変更」する方法は?
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 ...
。特にゲームでは、ステップごとにわずかな値を変更するのが一般的です。
私の質問は、よりエレガントな方法で単一の値を変更するライブラリ、デザインパターン、または他の方法がありますか?
代わりに、レンズに直接ジャンプするのは、(少なくとも私の意見では)特殊な構文よりもはるかに機能的なソルーションを提供するからです。 – kqr