次のレコードADTがあるとします。
data Foo = Bar { a :: Integer, b :: String, c :: String }
次のように、レコードを取り、1つのフィールドを除くすべてのフィールドが引数として渡されたものと同一の値を持っている(同じタイプの)レコードを返す関数が必要です。
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
上記は10
機能しますが、より多くのフィールド(たとえば)を持つレコードの場合、そのような関数を作成すると、多くの入力が必要になるので、かなり不要です。
同じことをする面倒な方法はありますか?
3
更新のためのレコード構文は存在しますが、すぐに面倒になります。代わりにレンズを見てください。
—
Cat Plus Plus