anchor.diff:                debug if # + - >= = ! with))
   (import base)
   (import lua/table)
  -(import type (list? nil? assert-type! exists?))
  +(import type (list? nil? assert-type! exists? falsey?))
   
   (defun car (x)
  +  "Return the first element of the array X"
     (assert-type! x list)
     (base/car x))
   
   (defun cdr (x)
  +  "Drop the first element of the array X, and return the rest."
     (assert-type! x list)
     (if (nil? x)
       '()
       (base/cdr x)))
   
   (defun foldr (f z xs)
  +  "Fold over the list XS using the binary operator F and the starting value Z."
     (assert-type! f function)
     (assert-type! xs list)
     (cond
  
positive.code:             (f head (foldr f z tail)))]))
  
  (defun map (f xs acc)
    (assert-type! f function)
    (assert-type! xs list)
    (cond
  
negative.code:     xs))
  
  (defun pop-last! (xs)
    "Mutate the list XS, removing and returning its last element."
    (assert-type! xs list)
    (set-idx! xs (# xs) nil)
    (set-idx! xs "n" (- (# xs) 1))
    xs)
  
  (defun remove-nth! (li idx)
    "Mutate the list LI, removing the value at IDX and returning it."
    (assert-type! li list)
    (set-idx! li "n" (- (get-idx li "n") 1))
    (lua/table/remove li idx))
  
  (defmacro for-each (var lst &body)
    "Perform the set of actions BODY for all values in LST, binding the current value to VAR."
    (assert-type! var symbol)
    (let* [(ctr' (gensym))
           (lst' (gensym))]
  