 
 : listener-loop ( name -- ? )
     dup listener> [
-        out-messages>> [ maybe-annotate-with-name
-                         irc> out-messages>> mailbox-put ] with
-        maybe-mailbox-get t
+        out-messages>> mailbox-get
+        maybe-annotate-with-name
+        irc> out-messages>> mailbox-put
+        t
     ] [ drop f ] if* ;
 
 : spawn-irc-loop ( quot: ( -- ? ) name -- )

    [ (reader-loop) ] [ handle-disconnect ] recover t ;

: writer-loop ( -- ? )
    irc> out-messages>> [ handle-outgoing-irc ] maybe-mailbox-get t ;

! ======================================
! Processing loops
! ======================================

: in-multiplexer-loop ( -- ? )
    irc> in-messages>> [ handle-incoming-irc ] maybe-mailbox-get t ;

: strings>privmsg ( name string -- privmsg )
    privmsg new [ (>>trailing) ] keep [ (>>name) ] keep ;

: irc-send ( irc-message -- ) irc> out-messages>> mailbox-put ;
: listener> ( name -- listener/f ) irc> listeners>> at ;


GENERIC: to-listener ( message obj -- )

