Powiedzmy, że mam następujący rekord ADT:
data Foo = Bar { a :: Integer, b :: String, c :: String }
Chcę funkcji, która pobiera rekord i zwraca rekord (tego samego typu), w którym wszystkie pola oprócz jednego mają identyczne wartości, jak te przekazane jako argument, na przykład:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
Powyższe działa, ale dla rekordu z większą liczbą pól (powiedzmy 10
), stworzenie takiej funkcji wymagałoby dużo pisania, które uważam za zupełnie niepotrzebne.
Czy są jakieś mniej żmudne sposoby na zrobienie tego samego?