Digamos que tengo el siguiente registro ADT:
data Foo = Bar { a :: Integer, b :: String, c :: String }
Quiero una función que tome un registro y devuelva un registro (del mismo tipo) donde todos menos uno de los campos tienen valores idénticos al que se pasó como argumento, así:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
Lo anterior funciona, pero para un registro con más campos (digamos 10
), crear una función de este tipo implicaría una gran cantidad de escritura que creo que es bastante innecesaria.
¿Hay formas menos tediosas de hacer lo mismo?