anchor.diff:            (t val))))
   
   (def-reader-for-json word-info-text "text")
  +(def-reader-for-json word-info-true-text "truetext")
   (def-reader-for-json word-info-kana "kana")
   (def-reader-for-json word-info-seq "seq")
   (def-reader-for-json word-info-score "score")
  
positive.code:           when (> i 1) do (terpri s)
            do (format s "~a. ~a ~@[《~a》 ~]~a" i rpos rinf gloss))))
  
  (defun split-pos (pos-str)
    (split-sequence #\, pos-str :start 1 :end (1- (length pos-str))))
  
  (defun get-senses-json (seq &key pos-list)
    (loop for (pos gloss props) in (get-senses seq)
       for emptypos = (equal pos "[]")
       for rpos = pos then (if emptypos rpos pos)
       for lpos = (split-pos pos) then (if emptypos lpos (split-pos pos))
       for inf = (cdr (assoc "s_inf" props :test 'equal))
       for rinf = (when inf (format nil "《~{~a~^; ~}》" inf))
       when (or (not pos-list) (intersection lpos pos-list :test 'equal))
       collect (let ((js (jsown:new-js ("pos" rpos) ("gloss" gloss))))
                 (if rinf (jsown:extend-js js ("info" rinf)))
                 js)))
  
negative.code: (defclass word-info ()
    ((type :initarg :type :accessor word-info-type)
     (text :initarg :text :accessor word-info-text)
     (true-text :initarg :true-text :initform nil :accessor word-info-true-text)
     (kana :initarg :kana :accessor word-info-kana)
     (seq :initarg :seq :initform nil :accessor word-info-seq)
     (conjugations :initarg :conjugations :initform nil :accessor word-info-conjugations)
  