receiveMessageEither :: MessageChannel a -> MessageChannel b -> IO (Either a b)
receiveMessageEither chan1 chan2 = atomically $
  map Left (receiveMessageSTM chan1) `orElseSTM` map Right (receiveMessageSTM chan2)
receiveMessageEither :: MessageChannel a -> MessageChannel b -> IO (Either a b)
receiveMessageEither chan1 chan2 = atomically $
  map Left (receiveMessageSTM chan1) `orElseSTM` map Right (receiveMessageSTM chan2)
receiveMessageEither chan1 chan2 = atomically $
  map Left (receiveMessageSTM chan1) `orElseSTM` map Right (receiveMessageSTM chan2)