Mate-clj is a Clojure library that will help you to control the flow of core macros and functions and will help you debug your code out of the box.
Add the dependency to your project.clj:
[mate-clj "1.0.1"]
user=> (require '[mate-clj.core :as mate])
user=> (def m {:body "flow test"})
user=> (mate/d-> m
:body ;step #1
(clojure.string/upper-case) ;step #2
(clojure.string/reverse)) ;step #3
(:body m) => "flow test" ;step #1 result
(clojure.string/upper-case (:body m)) => "FLOW TEST" ;step #2 result
(clojure.string/reverse (clojure.string/upper-case (:body m))) => "TSET WOLF" ;step #3 result
"TSET WOLF" ;the returned value
user=> (mate/dreduce + [1 3 5 7 9])
(#function[clojure.core/+] 1 3) => 4
(#function[clojure.core/+] 4 5) => 9
(#function[clojure.core/+] 9 7) => 16
(#function[clojure.core/+] 16 9) => 25
25 ;the returned value
user=> (mate/dcond->> 1
true inc
(= 3 2) (* 42)
true (+ 100)
(= 2 2) (* 9))
(inc 1) => 2
(+ 100 (inc 1)) => 102
(* 9 (+ 100 (inc 1))) => 918
918 ;the returned value
user=> (mate/das-> 1 n
(* 2 n)
(+ n n)
(+ n 2 3 4))
n => 1
(* 2 n) => 2
(+ n n) => 4
(+ n 2 3 4) => 13
13 ;the returned value
user=> (mate/dfilter even? [1 2 3 4 5 6])
#function[clojure.core/even?] 1 => false
#function[clojure.core/even?] 2 => true
#function[clojure.core/even?] 3 => false
#function[clojure.core/even?] 4 => true
#function[clojure.core/even?] 5 => false
#function[clojure.core/even?] 6 => true
(2 4 6) ;the returned value
(mate/dtake-while neg? [-2 -1 0 1 2 3])
#function[clojure.core/neg?] -2 => true
#function[clojure.core/neg?] -1 => true
#function[clojure.core/neg?] 0 => false
(-2 -1) ;the returned value
(mate/ddrop-while neg? [-1 -2 -6 -7 1 2 3 4 -5 -6 0 1])
#function[clojure.core/neg?] -1 => true
#function[clojure.core/neg?] -2 => true
#function[clojure.core/neg?] -6 => true
#function[clojure.core/neg?] -7 => true
#function[clojure.core/neg?] 1 => false
(1 2 3 4 -5 -6 0 1) ;the returned value
(mate/dsplit-with (partial > 3) [1 2 3 2 1])
#function[clojure.core/partial/fn--5824] 1 => true
#function[clojure.core/partial/fn--5824] 2 => true
#function[clojure.core/partial/fn--5824] 3 => false
#function[clojure.core/partial/fn--5824] 1 => true
#function[clojure.core/partial/fn--5824] 2 => true
#function[clojure.core/partial/fn--5824] 3 => false
[(1 2) (3 2 1)] ;the returned value
(mate/dkeep (fn [x] (if (< 0 x) x nil)) [1 2 3 4 5 -10])
#function[user/eval15658/fn--15659] 1 => 1
#function[user/eval15658/fn--15659] 2 => 2
#function[user/eval15658/fn--15659] 3 => 3
#function[user/eval15658/fn--15659] 4 => 4
#function[user/eval15658/fn--15659] 5 => 5
#function[user/eval15658/fn--15659] -10 => nil
(1 2 3 4 5) ;the returned value
(mate/dkeep-indexed #(if (odd? %1) %2 nil) [1 2 3 4 5])
#function[user/eval15654/fn--15655] 0 1 => nil
#function[user/eval15654/fn--15655] 1 2 => 2
#function[user/eval15654/fn--15655] 2 3 => nil
#function[user/eval15654/fn--15655] 3 4 => 4
#function[user/eval15654/fn--15655] 4 5 => nil
(2 4) ;the returned value
(mate/devery? #{1 2} [1 2 3])
#{1 2} 1 => 1
#{1 2} 2 => 2
#{1 2} 3 => false
false ;the returned value
(mate/dnot-every? #{1 2} [1 2 3])
#{1 2} 1 => 1
#{1 2} 2 => 2
#{1 2} 3 => false
true ;the returned value
((mate/devery-pred number? even? pos?) 4 6 8 9)
#function[clojure.core/number?] 4 => true
#function[clojure.core/number?] 6 => true
#function[clojure.core/number?] 8 => true
#function[clojure.core/even?] 4 => true
#function[clojure.core/even?] 6 => true
#function[clojure.core/even?] 8 => true
#function[clojure.core/pos?] 4 => true
#function[clojure.core/pos?] 6 => true
#function[clojure.core/pos?] 8 => true
#function[mate-clj.core/devery-pred/ep3--9552/fn--9612] 9 => false
false ;the returned value
MIT
PRs are always welcome!
Can you improve this documentation? These fine people already did:
dborinsk, Dana Borinski, ahron levi, sparrownet & danaEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close