anchor.diff:        ;; Now process the statements.
         (loop for statement in statements do
           (trivia:match statement
  -          ((list operator inputs outputs)
  +          ((list operator inputs outputs types)
              (verify-operator operator)
  +           (unless (and (listp inputs)
  +                        (listp outputs)
  +                        (listp types)
  +                        (= (length outputs)
  +                           (length types)))
  +             (trivia.fail:fail))
              (loop for input in inputs do
                (if (symbolp input)
                    (process-input-symbol input)
  
positive.code: ;;;    with integers less than K, must appear as an OUTPUT of a statement,
  ;;;    and never as an input.
  ;;;
  ;;; Furthermore, the transformation of an input or output must be a mapping
  ;;; from the iteration space of the kernel to the shape of the buffer.
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  
negative.code:            (loop for output in outputs do
               (if (symbolp output)
                   (process-output-symbol output)
                   (verify-reference output iteration-space)))
             )
            (t
             (error "~S is not a valid kernel language statement."
                    statement))))
  