anchor.diff:    ;; BACKING-ARRAY (i.e. it's not displaced), then we change the
     ;; identity of the array which is surprising to say the least.
     (check-no-watchers mat nil "Cannot reshape or displace the matrix")
  -  (let* ((dimensions (alexandria:ensure-list dimensions))
  -         (size (reduce #'* dimensions)))
  -    (assert (<= (+ displacement size) (mat-max-size mat)))
  +  (let ((dimensions (alexandria:ensure-list dimensions)))
       (when (or (not (equal (mat-dimensions mat) dimensions))
                 (not (= (mat-displacement mat) displacement)))
  -      (setf (slot-value mat 'dimensions) dimensions)
  -      (setf (slot-value mat 'displacement) displacement)
  -      (setf (slot-value mat 'size) size)
  -      (maybe-reshape-and-displace-facet mat 'array
  -                                        dimensions displacement)
  -      (maybe-reshape-and-displace-facet mat 'cuda-array
  -                                        dimensions displacement)
  -      (maybe-reshape-and-displace-facet mat 'foreign-array
  -                                        dimensions displacement))
  +      (let ((size (mat-size-from-dimensions dimensions)))
  +        (assert (<= (+ displacement size) (mat-max-size mat)))
  +        (setf (slot-value mat 'dimensions) dimensions)
  +        (setf (slot-value mat 'displacement) displacement)
  +        (setf (slot-value mat 'size) size)
  +        (dolist (view (views mat))
  +          (reshape-and-displace-facet* mat (view-facet-name view)
  +                                       (view-facet view)
  +                                       dimensions displacement))))
       mat))
  -
  -(defun maybe-reshape-and-displace-facet (mat facet-name dimensions displacement)
  -  (let ((view (find-view mat facet-name)))
  -    (when view
  -      (reshape-and-displace-facet* mat facet-name (view-facet view)
  -                                   dimensions displacement))))
   
   (defgeneric reshape-and-displace-facet* (mat facet-name facet
                                            dimensions displacement)
  
positive.code: 
  (defun replace-vector (vector start dimensions seq-of-seqs ctype)
    (let ((i start)
          (n (reduce #'* dimensions)))
      (labels ((foo (dims seq-of-seqs)
                 (let ((n-dims (length dims)))
                   (cond ((= 0 n-dims)
  
negative.code: 
  (defmethod make-facet* ((mat mat) (facet-name (eql 'foreign-array)))
    (assert (or (eq *foreign-array-strategy* :dynamic)
                ;; It may be that this backing array was allocated when
                ;; *FOREIGN-ARRAY-STRATEGY* was :PIN-BACKING-ARRAY so it
                ;; is not static.
                (and (eq *foreign-array-strategy* :static-backing-array)
  