anchor.diff:      (mapcar #'(lambda (shader) (gl:detach-shader program shader)) shaders)
       program))
   
  -(defun make-gl-array (vect)
  -  (let ((array (gl:alloc-gl-array :float (length vect))))
  +(defun make-gl-array (type vect)
  +  (let ((array (gl:alloc-gl-array type (length vect))))
       (dotimes (i (length vect))
         (setf (gl:glaref array i) (aref vect i)))
       array))
  
positive.code: 
  (in-package #:cl-foo)
  
  (defun read-shader (filename)
    (let ((shader (gl:create-shader (if (string= ".vert" (subseq filename (- (length filename) 5)))
                                        :vertex-shader
                                        :fragment-shader)))
          (pathname (merge-pathnames (asdf:system-source-directory :cl-foo) filename)))
      (gl:shader-source shader (alexandria:read-file-into-string pathname))
      (gl:compile-shader shader)
      (if (not (gl:get-shader shader :compile-status))
          (error (concatenate 'string "Error in " filename "~%" (gl:get-shader-info-log shader))))
  
negative.code:           (progn ,@body)
         (gl:delete-buffers ,buffers))))
  
  (defmacro with-shaders ((shaders program &key shader-list dir) &body body)
    `(let* ((,shaders (mapcar #'(lambda (x) (read-shader x ,dir)) ,shader-list))
            (,program (shader-program ,shaders)))
       (unwind-protect
            (progn ,@body)
  