Clojure 関数の一部を「浄化」しようとしています。すべての副作用コードが 1 つの関数で明示的に宣言されるようにしたいと考えています。最初にデータを取得し、最後にそれを db に書き込み、その間に純粋な関数を変換するのは簡単です。ただし、通常の状況では、変換関数はロジックの途中で別の DB 読み取りを必要とします。
(defn transform-users
[users]
(let [ids (map :id users)
profiles (db/read :profiles ids)]
(profiles->something profiles)))
(->> (db/read :users)
(transform-users)
(db/write :something)
明らかにこれは非常に単純な例ですが、要点は、db/read
そこから副作用のある関数を取得するにはどうすればよいか、どうすればtransform-users
純粋にすることができるか (そして利点として、簡単にテストできるようにするか) です。