anchor.diff:  ;; merge
   ;; fill
   
  +;; ## Wont Implement
  +;; rational (uses gcd)
  +;; rationalize (uses gcd)
   
   ;;------------------------------------------------------------
   
  
positive.code:   (if (numberp p)
        `(double ,x)
        `(progn ,p (double ,x))))
  
  
  (macrolet ((define-type-pred (func-name &rest v-types)
               `(progn
                  (v-def-glsl-template-fun ,func-name (x) "<invalid>" (v-type)
                                           v-bool :pure t)
                  (v-define-compiler-macro ,func-name ((x v-type)
                                                       &environment env)
                    (let ((type (varjo:argument-type 'x env)))
                      (list 'progn
                            x
                            (or ,@(loop :for v-type :in v-types :collect
                                     `(v-typep type ',v-type)))))))))
    (define-type-pred arrayp v-array)
    (define-type-pred simple-vector-p v-array)
    (define-type-pred vectorp v-array)
    (define-type-pred functionp v-function-type)
    (define-type-pred complexp v-complex)
    (define-type-pred numberp v-number)
    (define-type-pred realp v-real)
    (define-type-pred floatp v-float v-double)
    (define-type-pred integerp v-integer)
    (define-type-pred rationalp v-rational))
  
  
  (v-def-glsl-template-fun simple-bit-vector-p (a) "false" (v-type) v-bool)
  (v-def-glsl-template-fun random-state-p (a) "false" (v-type) v-bool)
  
  
  
  ;; Could use v-integer for both of these when we add that
  
negative.code: ;; setf expanders
  ;; rotatef
  ;; shiftf
  ;; decode-float
  ;; float-precision
  ;; integer-decode-float
  
  
  ;; ## Crazy Town
  ;; every
  ;; notany
  ;; notevery
  ;; some
  ;; constantly
  ;; copy-seq
  ;; make-sequence
  ;; subseq
  