anchor.diff:    "Split string LINE by sequence SEQ once."
     (let ((pos (search seq line)))
       (list (subseq line 0 pos) (subseq line (+ pos (length seq))))))
  +
  +(defun numeric-p (string)
  +  "Check if string contains only digits."
  +  (not (position-if-not #'digit-char-p string)))
  +
  +;; Errors
  +(define-condition nickname-already-in-use (error)
  +  ((text :initarg :text :reader text)))
   
   ;; IRC message classes
   
  
positive.code: (in-package #:zoglog)
  
  ;; Helper functions
  
  (defmacro send-cmd (socket tpl &rest args)
    "Send IRC command through SOCKET."
    `(progn
  
negative.code:                           :command command
                            :args args
                            :raw raw)))
      (cond
        ;; Numeric
        ((numeric-p command) (init-instance 'numeric-message))
        ;; PRIVMSG ACTION
        ((and (string= command "PRIVMSG")
              (string-prefix-p (format nil "~CACTION" #\u001) (cadr args)))
         (init-instance 'action-message))
        ;; PRIVMSG
        ((string= command "PRIVMSG") (init-instance 'privmsg-message))
        ;; JOIN
        ((string= command "JOIN") (init-instance 'join-message))
        ;; PART
        ((string= command "PART") (init-instance 'part-message))
        ;; PART
        ((string= command "QUIT") (init-instance 'quit-message))
        ;; Other
        (t (init-instance 'irc-message)))))
  
  (defun parse-message (line)
  