IRC クライアントのインターフェース

以下のようなのはどうだろうか。応答したい状態に対してだけ match を書く感じ。
ログを取るだけならこれくらいのコード量で実現できる。

(irc-bot "irc.freenode.net" "6666" "kaela" "#higepon"
         (lambda (msg return privmsg send)
           (match msg
             [('PRIVMSG who message)
              (format #t "~a <~a> ~a\n" (date->string (current-date) "~H:~M") who message)]
             [('ERROR 433)
              (error 'irc "Nickname is already in use")]
             [('ERROR e)
              (return e)])))
  • return は終了手続き
  • privmsg は PRIVMSG 発行
  • send は生のテキストをサーバーに送る。


ああ。文字エンコーディングの問題があるか。wide 系は ISO-2022-JP なので、R6RS の範囲ではどうしようもない。
誰か Codec 書いてくれないだろうか。