[let a value come out of rcDo Evan Martin **20060217055402] { hunk ./MPD.hs 58 -withReconnect :: Connection -> (String, Int) -> (Connection -> IO ()) -> IO Connection +withReconnect :: Connection -> (String, Int) -> (Connection -> IO a) -> IO (Connection, a) hunk ./MPD.hs 60 - func conn >> return conn `catch` \e -> do - -- print $ ioeGetErrorString e - newconn <- MPD.connect addr - func newconn - return newconn + do { ret <- func conn; return (conn, ret) } `catch` \e -> do + -- print $ ioeGetErrorString e + newconn <- MPD.connect addr + ret <- func newconn + return (newconn, ret) hunk ./MPD.hs 76 -rcDo :: ReconnectableConnection -> (Connection -> IO ()) -> IO () +rcDo :: ReconnectableConnection -> (Connection -> IO a) -> IO a hunk ./MPD.hs 79 - newconn <- withReconnect conn addr job + (newconn, ret) <- withReconnect conn addr job hunk ./MPD.hs 81 + return ret }