This adds support for two new definition types to the left! convenience
macro: defun* and defadvice.
First, defun* is for defining recursive, local functions (uses
cl-labels under the hood). e.g.
(letf! (defun* triangle (number)
(cond ((<= number 0) 0)
((= number 1) 1)
((> number 1)
(+ number (triangle (1- number))))))
...)
Second, defadvice is for defining temporary advice (which has a global
effect; it can later be improved to limit scope by redefining things
with cl-letf). e.g.
(letf! (defadvice my-fixed-triangle (fn number)
:around #'triangle
(funcall fn (1+ number)))
...)