anchor.diff:          ;; all arguments are literals, convert to a constant
           ;; fixme: make sure this catches named constants too
           ((every (lambda (x) (typep x '(cons (eql :literal)))) nv)
  +         (loop for l in nv
  +               do (use-type (second nv)))
            ;; add name as an alias for the literal
            (let* ((l (composite-literal (normalize-literals-and-types type) nv)))
              #+=(format t "~&cc ~s ->~% ~s~% @ ~s (~s)->   ~s~%" values
  
positive.code:               ;; (and if so, how they work)
                (normalize-literals-and-types (third x)) ;; literal or variable
                layout)))
      ((cons (member :vec :mat))
       (list* (first x)
              (normalize-literals-and-types (second x) :force t)
              (cddr x)))
  
negative.code:                            (cons list)))
  (deftype variable () '(cons (eql :variable)))
  (deftype scalar () '(cons (member :bool :int :uint :float)))
  (deftype literal () '(cons (eql :literal)))
  
  (defvar *types*)
  (defvar *struct-types*)
  