我在 Haskell 中发现了一个有趣的库,名为Scrap Your Boilerplate ,它基于Simon Peyton Jones 的一篇论文,这似乎是一种编写代码的有效方法,可以用函数式编程语言更新大型、深度嵌套的数据结构。它启用如下代码:
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))))