anchor.diff:  ;;; Capturing the computation in effect
   
   (defstruct variable
  -  "A typed variable"
  +  "A typed Lisp variable"
     name
     type)
   
  
positive.code: 			 ((and (type= available-type '(boolean))
  			       (type= type '(integer)))
  			  (return-from pop-form
  			    (values `(if ,lisp-form 1 0))))
  			 ((null-type effective-type)
  			  (bst-compile-error "Type mismatch: expecting ~A, got ~A."
  					     type available-type))
  
negative.code:       (push-form mvform-1)
        (push-form mvform-2)))
  
  (define-bst-special-form "="
      (multiple-value-bind (form-1 type-1 side-effects-p-1)
  	(pop-form t :need-variable nil)
        (multiple-value-bind (form-2 type-2 side-effects-p-2)
  	  (pop-form type-1 :need-variable nil)
  	(let ((form (cond
  		      ((type= type-2 '(boolean))
  		       `(eql ,form-1 ,form-2))
  		      ((type= type-2 '(integer))
  		       `(= ,form-1 ,form-2))
  		      ((type= type-2 '(string))
  		       `(string= ,form-1 ,form-2))
  		      (t
  		       `(equal ,form-1 ,form-2)))))
  	  (push-form (make-mvform :form form
  				  :types (list '(boolean))
  				  :side-effects-p
  				  (max-side-effects side-effects-p-1
  						    side-effects-p-2)))))))
  	
  (define-bst-special-form ":="
      (let* ((var (pop-literal))
  	   (value-form (pop-form t :need-variable nil)))
  