Skip to content

Commit

Permalink
Make --> bind IT for use anywhere in FORMS, and add -as->.
Browse files Browse the repository at this point in the history
  • Loading branch information
zck committed May 25, 2017
1 parent 524e6fe commit a3b40f8
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 12 deletions.
34 changes: 23 additions & 11 deletions dash.el
Original file line number Diff line number Diff line change
Expand Up @@ -1354,17 +1354,29 @@ last item in second form, etc."
(list form x)))
(:else `(->> (->> ,x ,form) ,@more))))

(defmacro --> (x form &rest more)
"Thread the expr through the forms. Insert X at the position
signified by the token `it' in the first form. If there are more
forms, insert the first form at the position signified by `it' in
in second form, etc."
(declare (debug (form &rest [&or symbolp (sexp &rest [&or "it" form])])))
(if (null more)
(if (listp form)
(--map-when (eq it 'it) x form)
(list form x))
`(--> (--> ,x ,form) ,@more)))
(defmacro --> (x &rest forms)
"Starting with the value of X, thread each expression through FORMS.
Insert X at the position signified by the token `it' in the first
form. If there are more forms, insert the first form at the position
signified by `it' in in second form, etc."
(declare (debug (form body)))
`(-as-> ,x it ,@forms))

(defmacro -as-> (value variable &rest forms)
"Starting with VALUE, thread VARIABLE through FORMS.
In the first form, bind VARIABLE to VALUE. In the second form, bind
VARIABLE to the result of the first form, and so forth."
(declare (debug (form symbolp body)))
(if (null forms)
`,value
`(let ((,variable ,value))
(-as-> ,(if (symbolp (car forms))
(list (car forms) variable)
(car forms))
,variable
,@(cdr forms)))))

(defmacro -some-> (x &optional form &rest more)
"When expr is non-nil, thread it through the first form (via `->'),
Expand Down
12 changes: 11 additions & 1 deletion dev/examples.el
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,17 @@ new list."
(defexamples -->
(--> "def" (concat "abc" it "ghi")) => "abcdefghi"
(--> "def" (concat "abc" it "ghi") (upcase it)) => "ABCDEFGHI"
(--> "def" (concat "abc" it "ghi") upcase) => "ABCDEFGHI")
(--> "def" (concat "abc" it "ghi") upcase) => "ABCDEFGHI"
(--> "def" upcase) => "DEF"
(--> 3 (car (list it))) => 3)

(defexamples -as->
(-as-> 3 my-var (1+ my-var) (list my-var) (mapcar (lambda (ele) (* 2 ele)) my-var)) => '(8)
(-as-> 3 my-var 1+) => 4
(-as-> 3 my-var) => 3
(-as-> "def" string (concat "abc" string "ghi")) => "abcdefghi"
(-as-> "def" string (concat "abc" string "ghi") upcase) => "ABCDEFGHI"
(-as-> "def" string (concat "abc" string "ghi") (upcase string)) => "ABCDEFGHI")

(defexamples -some->
(-some-> '(2 3 5)) => '(2 3 5)
Expand Down

0 comments on commit a3b40f8

Please sign in to comment.