Clojure эквивалент Haskell's «Scrap Your Boilerplate» (SYB)

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

11
задан mikera 11 September 2011 в 05:54
поделиться