anchor.diff:          (satisfies square-matrix-p)))
   
   (setf (get 'mat 'element-type) 'scalar)
  +
  +(declaim (inline mat))
  +(defun mat (&rest args)
  +  (if (square-matrix-p args)
  +      (apply #'vec args)
  +      (error 'simple-error
  +             :format-control "arglist must fit a square matrix
  +and be of length (* dimension dimension)")))
   
   ;;;; ---------------------------------------------------------------------------
   ;;;; * Macro definitions
  
positive.code: 
  (defun emit-type-declaration (type element-type slots)
    "Emit the vector type declaration."
    (let ((len (length slots)))
      `((declaim (inline ,type))
        (deftype ,type (&optional (element-type 'scalar))
          ,(list 'list ''vec len 'element-type))
        (defstruct (,type
                     (:type (vector ,element-type))
                     (:copier nil)
                     (:constructor)
                     (:constructor ,type ,(cons '&optional (mapcar #'ensure-car slots))))
          ,@(mapcar (lambda (s)
                      (list (ensure-car s)
                            (coerce (ensure-cadr s 0) element-type)
                            ':type element-type))
             slots)))))
  
  (defun emit-meta-data (type element-type slots)
    `((eval-when (:compile-toplevel :load-toplevel :execute)
  
negative.code:   (let ((len (length a)))
      (= (isqrt len) (sqrt len))))
  
  ;;; A square matrix with element type scalar
  (deftype mat (&optional dimension (element-type 'scalar))
    `(and (simple-array ,element-type (,(if (eq '* dimension)
                                            dimension
  