diff --git a/lens.lisp b/lens.lisp index 42044d0..40535fc 100644 --- a/lens.lisp +++ b/lens.lisp @@ -423,6 +423,11 @@ (reverse (cdr it)))) (alexandria:hash-table-alist groups))))) +(defun x-group (fn) + (lambda (groups) + (loop for (key . group) in groups + collect (funcall fn key group)))) + (defun hash-join (probe join-fn &key (test 'eql) (key 'car)) (let* ((lookup (make-hash-table :test test :size (length probe))) (lookup-fn (functionalize lookup))) diff --git a/package.lisp b/package.lisp index aa01b33..0b483b0 100644 --- a/package.lisp +++ b/package.lisp @@ -21,9 +21,7 @@ #:transform-elt #:denest #:op #:defalias #:<> #:<>1 #:== #:• #:∘ #:suffixp #:functionalize #:inc #:group-by #:keys #:conj #:disj #:delay #:of-type #:transform #:calling* - #:calling - #:hash-join - #:tap)) + #:calling #:hash-join #:tap #:x-group)) (defpackage :data-lens.transducers.internals (:use :cl)