Я нашел интересную библиотеку в Haskell под названием Scrap Your Boilerplate , основанную на статье Саймона Пейтона Джонса , которая кажется эффективным способом написания кода которые могут обновлять большие, глубоко вложенные структуры данных на функциональном языке программирования. Он включает такой код:
incS :: Float -> Salary -> Salary
incS k (S s) = S (s * (1+k))
increase :: Float -> Company -> Company
increase k = everywhere (mkT (incS k))
, который эффективно увеличивает зарплату на фиксированную пропорцию k для всех в потенциально большой и сложной структуре данных компании.
Есть ли эквивалентная библиотека или подход для достижения такого же стиля программирования в Clojure?
Например, как я могу написать эквивалент Clojure примера, использованного выше:
(defn increase [company k]
(everywhere-in company (transform-map-values :salary #(* % (+ 1 k))))