Hãy nói rằng tôi có ADT kỷ lục sau đây:Cách viết tắt để gán một trường đơn lẻ trong một bản ghi, trong khi sao chép phần còn lại của các trường?
data Foo = Bar { a :: Integer, b :: String, c :: String }
Tôi muốn có một chức năng mà phải mất một kỷ lục và trả về một kỷ lục (cùng loại), nơi tất cả nhưng một trong những lĩnh vực có giá trị giống với một trôi qua như là đối số, như vậy:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
các công trình trên, nhưng đối với một kỷ lục với nhiều lĩnh vực (nói 10
), tạo ra một chức năng như vậy sẽ đòi hỏi rất nhiều cách gõ mà tôi cảm thấy là khá cần thiết.
Có cách nào ít tẻ nhạt hơn để làm giống nhau không?
Ghi lại cú pháp để cập nhật, nhưng nhanh chóng trở nên cồng kềnh. Hãy xem [lens] (http://stackoverflow.com/questions/5767129/lenses-fclabels-data-accessor-which-library-for-structure-access-and-mutatio) thay thế. –