Sagen wir, ich den folgenden Datensatz ADT haben:Kurzform für die Zuweisung eines einzelnen Feldes in einem Datensatz, während die restlichen Felder kopiert werden?
data Foo = Bar { a :: Integer, b :: String, c :: String }
Ich möchte eine Funktion, die einen Datensatz nimmt und einen Datensatz (vom gleichen Typ), wobei alle bis auf einen der Felder der einen identischen Werten bestanden haben, als Argument, etwa so:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
die oben genannten Arbeiten, aber für einen Datensatz mit mehreren Feldern (zB 10
), würde eine solche Funktion zu schaffen eine Menge Tipparbeit mit sich bringen, die ich fühle mich ganz unnötig ist.
Gibt es weniger mühsame Möglichkeiten, das Gleiche zu tun?
Record-Syntax für die Aktualisierung existiert, wird aber schnell umständlich. Sehen Sie sich stattdessen [Linsen] (http://stackoverflow.com/questions/5767129/lenses-fclabels-data-accessor-which-library-for-structure-access-and-mutatio) an. –