Diciamo che ho il seguente ADT cronaca:Modo abbreviato per assegnare un singolo campo in un record, mentre si copia il resto dei campi?
data Foo = Bar { a :: Integer, b :: String, c :: String }
Voglio una funzione che prende un record e restituisce un record (dello stesso tipo), dove tutti, ma uno dei campi hanno valori identici a quello passato come argomento, in questo modo:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
I lavori di cui sopra, ma per un record con più campi (diciamo 10
), la creazione di una tale funzione comporterebbe un sacco di battitura che sento è abbastanza inutile.
Ci sono modi meno noiosi di fare lo stesso?
La sintassi di registrazione per l'aggiornamento esiste, ma diventa rapidamente ingombrante. Date un'occhiata a [obiettivi] (http://stackoverflow.com/questions/5767129/lenses-fclabels-data-accessor-which-library-for-structure-access-and-mutatio). –