Logger combinators
(defn cmap [f l]
(fn [r] (l (f r))))
(defn cfilter [p l]
(fn [r] (if (p r) (l r))))
(defn append [& ls]
(fn [r]
(doseq [l ls]
(l r))))
(def logger
(->> println
(cfilter (complement empty?))
(cmap #(.toUpperCase %))))
(logger "hello")
(logger "")
(logger "world")
((append logger println) "example")
INFO