Add composition operators and defalias/op

This commit is contained in:
Ed Langley
2019-04-25 17:40:37 -07:00
parent f909394cab
commit 04f22d37bc

View File

@ -1,11 +1,13 @@
(defpackage :data-lens (defpackage :data-lens
(:use :cl) (:use :cl)
(:import-from #:serapeum #:op #:defalias)
(:export #:regex-match #:include #:exclude #:pick #:key-transform (:export #:regex-match #:include #:exclude #:pick #:key-transform
#:combine #:derive #:cumsum #:over #:on #:shortcut #:defun-ct #:key #:combine #:derive #:cumsum #:over #:on #:shortcut #:defun-ct #:key
#:extract-key #:element #:let-fn #:juxt #:transform-tail #:slice #:extract-key #:element #:let-fn #:juxt #:transform-tail #:slice
#:compress-runs #:combine-matching-lists #:sorted #:applicable-when #:compress-runs #:combine-matching-lists #:sorted #:applicable-when
#:of-length #:of-min-length #:of-max-length #:transform-head #:of-length #:of-min-length #:of-max-length #:transform-head
#:maximizing #:zipping #:applying #:transform-elt #:denest)) #:maximizing #:zipping #:applying #:transform-elt #:denest #:op
#:defalias #:<> #:<>1))
(in-package :data-lens) (in-package :data-lens)
(declaim (declaim
@ -279,3 +281,17 @@
(funcall (zipping 'vector) (funcall (zipping 'vector)
it it
(alexandria:iota it-length)))))))) (alexandria:iota it-length))))))))
(defmacro <> (arity &rest funs)
(let ((arg-syms (loop repeat arity collect (gensym))))
`(lambda (,@arg-syms)
(declare (dynamic-extent ,@arg-syms))
,(fw.lu:rollup-list (mapcar (lambda (x)
(etypecase x
(list `(funcall ,x))
(symbol (list x))))
funs)
arg-syms))))
(defmacro <>1 (&rest funs)
`(<> 1 ,@funs))