readTalk :: (Int -> IO String) -> Inbound.Header -> Inbound.ChatExposure -> IO Inbound.InboundMessage
readTalk readNullTerminatedText header exposure =
  do
    let speaking = Inbound.messageRefNumber header
        messageLength = Inbound.messageSize header

    message <- truncateChatMessage <$> readNullTerminatedText messageLength

    let chat = Inbound.Chat {
            Inbound.chatSpeaker = speaking
          , Inbound.chatRecipient = Nothing
          , Inbound.chatMessage = message
          , Inbound.chatExposure = exposure
          }
    return $ Inbound.ChatMessage chat
readTalk :: (Int -> IO String) -> Inbound.Header -> Inbound.ChatExposure -> IO Inbound.InboundMessage
readTalk readNullTerminatedText header exposure =
  do
    let speaking = Inbound.messageRefNumber header
        messageLength = Inbound.messageSize header

    message <- truncateChatMessage <$> readNullTerminatedText messageLength

    let chat = Inbound.Chat {
            Inbound.chatSpeaker = speaking
          , Inbound.chatRecipient = Nothing
          , Inbound.chatMessage = message
          , Inbound.chatExposure = exposure
          }
    return $ Inbound.ChatMessage chat
readTalk readNullTerminatedText header exposure =
  do
    let speaking = Inbound.messageRefNumber header
        messageLength = Inbound.messageSize header

    message <- truncateChatMessage <$> readNullTerminatedText messageLength

    let chat = Inbound.Chat {
            Inbound.chatSpeaker = speaking
          , Inbound.chatRecipient = Nothing
          , Inbound.chatMessage = message
          , Inbound.chatExposure = exposure
          }
    return $ Inbound.ChatMessage chat