git.fiddlerwoaroof.com
Browse code

Add composition operators and defalias/op

Ed Langley authored on 26/04/2019 00:40:37
Showing 1 changed files
... ...
@@ -1,11 +1,13 @@
1 1
 (defpackage :data-lens
2 2
   (:use :cl)
3
+  (:import-from #:serapeum #:op #:defalias)
3 4
   (:export #:regex-match #:include #:exclude #:pick #:key-transform
4 5
            #:combine #:derive #:cumsum #:over #:on #:shortcut #:defun-ct #:key
5 6
            #:extract-key #:element #:let-fn #:juxt #:transform-tail #:slice
6 7
            #:compress-runs #:combine-matching-lists #:sorted #:applicable-when
7 8
            #:of-length #:of-min-length #:of-max-length #:transform-head
8
-           #:maximizing #:zipping #:applying #:transform-elt #:denest))
9
+           #:maximizing #:zipping #:applying #:transform-elt #:denest #:op
10
+           #:defalias #:<> #:<>1))
9 11
 (in-package :data-lens)
10 12
 
11 13
 (declaim 
... ...
@@ -279,3 +281,17 @@
279 281
                  (funcall (zipping 'vector)
280 282
                           it
281 283
                           (alexandria:iota it-length))))))))
284
+
285
+(defmacro <> (arity &rest funs)
286
+  (let ((arg-syms (loop repeat arity collect (gensym))))
287
+    `(lambda (,@arg-syms)
288
+       (declare (dynamic-extent ,@arg-syms))
289
+       ,(fw.lu:rollup-list (mapcar (lambda (x)
290
+                                     (etypecase x
291
+                                       (list `(funcall ,x))
292
+                                       (symbol (list x))))
293
+                                   funs)
294
+                           arg-syms))))
295
+
296
+(defmacro <>1 (&rest funs)
297
+  `(<> 1 ,@funs))