Я нашел интересную библиотеку в 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))))