Katakanlah saya memiliki catatan ADT berikut:
data Foo = Bar { a :: Integer, b :: String, c :: String }
Saya ingin fungsi yang mengambil record dan mengembalikan record (dengan tipe yang sama) di mana semua kecuali satu bidang memiliki nilai yang identik dengan yang diteruskan sebagai argumen, seperti:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
Cara di atas berfungsi, tetapi untuk rekaman dengan lebih banyak bidang (katakanlah 10
), membuat fungsi seperti itu akan memerlukan banyak pengetikan yang menurut saya tidak terlalu diperlukan.
Apakah ada cara yang tidak terlalu membosankan untuk melakukan hal yang sama?