anchor.diff:             (reply-to message "~a" (string-upcase sentence)))
             ((pattern-matches-p +camptown-pattern+ pattern)
              ;; Camptown ladies sing this song
  -           (reply-to message "doo-dah doo-dah"))
  -          ((= (length pattern) 17)
  -           ;; Haiku
  -           (reply-to message "~a said a haiku!" (source message))))))))
  +           (reply-to message "doo-dah doo-dah")))))))
  
positive.code:             do (return nil)
            finally (return t))))
  
  (defmethod examine-message ((module poetry-module) (message irc:irc-privmsg-message))
    (dolist (sentence (ppcre:split " *[.?!] *" (second (arguments message))))
      (let ((pattern (string-to-pattern (syllables-of module) sentence)))
        (when pattern
  
negative.code:                                          (second word-pronounciation)))))
          finally (return dict)))))
  
  (defun lookup-syllables (dict word)
    (gethash (remove-if-not (lambda (c)
                              (or (alpha-char-p c)
                                  (find c "'")))
                            (string-downcase word))
             dict))
  
  (defun string-to-pattern (dict s)
    (join-to-string ""
                    (loop for word in (ppcre:split "\\s" s)
                          as pattern = (lookup-syllables dict word)
                          collect (cond
                                    ((null pattern)
                                     ;; fail if a word can't be found.  We don't
                                     ;; want any false positives.
                                     (return-from string-to-pattern nil))
                                    ((= (length pattern) 1)
                                     ;; single words can match stressed or unstressed parts
  