Ich habe eine interessante Bibliothek in Haskell namens Scrap Your Boilerplate entdeckt, die auf einem Paper von Simon Peyton Jones basiert und anscheinend eine effektive Möglichkeit bietet, Code zu schreiben, der große, tief verschachtelte Datenstrukturen in einer funktionalen Programmiersprache aktualisieren kann. Es ermöglicht Code wie:
incS :: Float -> Salary -> Salary
incS k (S s) = S (s * (1+k))
increase :: Float -> Company -> Company
increase k = everywhere (mkT (incS k))
Was effektiv das Gehalt um einen festen Anteil k für jeden in einer potenziell großen und komplexen Firmen-Datenstruktur erhöht.
Gibt es eine äquivalente Bibliothek oder einen Ansatz, um denselben Programmierstil in Clojure zu erreichen?
Zum Beispiel, wie könnte ich das Clojure-Äquivalent des oben verwendeten Beispiels schreiben:
(defn increase [company k]
(everywhere-in company (transform-map-values :salary #(* % (+ 1 k))))