สมมติว่าฉันมี ADT บันทึกต่อไปนี้:
data Foo = Bar { a :: Integer, b :: String, c :: String }
ฉันต้องการฟังก์ชันที่ใช้บันทึกและส่งคืนเร็กคอร์ด (ประเภทเดียวกัน) โดยที่ฟิลด์ทั้งหมดยกเว้นฟิลด์ใดฟิลด์หนึ่งมีค่าที่เหมือนกันกับฟิลด์ที่ส่งผ่านเป็นอาร์กิวเมนต์ดังนี้:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
ข้างต้นใช้งานได้ แต่สำหรับบันทึกที่มีฟิลด์มากกว่า (พูด10
) การสร้างฟังก์ชันดังกล่าวจะทำให้เกิดการพิมพ์จำนวนมากซึ่งฉันรู้สึกว่าไม่จำเป็นเลยทีเดียว
มีวิธีที่น่าเบื่อน้อยกว่าในการทำเช่นเดียวกันหรือไม่?
3
มีการบันทึกไวยากรณ์สำหรับการอัปเดต แต่จะยุ่งยากอย่างรวดเร็ว ลองดูที่เลนส์แทน
—
Cat Plus Plus