(in-package :util) (defmethod string->type (string (type (eql 'string))) string) (defmethod string->type (string (type (eql 'character))) (char string 0)) (defmethod string->type (string (type (eql 'integer))) (parse-integer string :junk-allowed t)) (defmethod string->type (string (type (eql 'keyword))) (intern (string-upcase string) :keyword)) (defmethod string->type (string (type (eql 'symbol))) (intern (string-upcase string) site:+package+)) (defmethod string->type (string (type (eql 't))) (let ((*package* site:+package+)) (read-from-string string nil nil))) (defmethod string->type (string (type (eql 'list))) (let ((*package* site:+package+)) (with-input-from-string (stream string) (loop for object = (read stream nil stream) until (eq object stream) collect object))))