diff --git a/lens.lisp b/lens.lisp index 4bbda76..cf8aa7f 100644 --- a/lens.lisp +++ b/lens.lisp @@ -115,11 +115,16 @@ (<= (length it) len))) -(defun applicable-when (fun test) - (lambda (it) - (if (funcall test it) - (funcall fun it) - it))) +(defun applicable-when (fun test &optional (default nil default-p)) + (if default-p + (lambda (it) + (if (funcall test it) + (funcall fun it) + default)) + (lambda (it) + (if (funcall test it) + (funcall fun it) + it)))) (defmacro conj (&rest fns) (let ((dat (gensym "dat"))) diff --git a/t/lens.lisp b/t/lens.lisp index 953dc15..9109590 100644 --- a/t/lens.lisp +++ b/t/lens.lisp @@ -84,6 +84,9 @@ (5am:is (equal 1 (funcall (data-lens:applicable-when '1+ (constantly nil)) 1))) + (5am:is (equal "hi" + (funcall (data-lens:applicable-when '1+ (constantly nil) "hi") + 1))) (5am:is (equal 2 (funcall (data-lens:applicable-when '1+ (constantly t)) 1))))