src/Tools/Haskell/Haskell.thy
changeset 74186 92e74f9305a4
parent 74185 2508ea6a9a11
child 74187 6109a9105a7a
equal deleted inserted replaced
74185:2508ea6a9a11 74186:92e74f9305a4
  2733 {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
  2733 {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
  2734 
  2734 
  2735 module Isabelle.Byte_Message (
  2735 module Isabelle.Byte_Message (
  2736     write, write_line,
  2736     write, write_line,
  2737     read, read_block, read_line,
  2737     read, read_block, read_line,
  2738     make_message, write_message, read_message,
  2738     make_message, write_message, read_message, exchange_message,
  2739     make_line_message, write_line_message, read_line_message,
  2739     make_line_message, write_line_message, read_line_message,
  2740     read_yxml, write_yxml
  2740     read_yxml, write_yxml
  2741   )
  2741   )
  2742 where
  2742 where
  2743 
  2743 
  2835 read_message socket = do
  2835 read_message socket = do
  2836   res <- read_line socket
  2836   res <- read_line socket
  2837   case res of
  2837   case res of
  2838     Just line -> Just <$> mapM (read_chunk socket) (parse_header line)
  2838     Just line -> Just <$> mapM (read_chunk socket) (parse_header line)
  2839     Nothing -> return Nothing
  2839     Nothing -> return Nothing
       
  2840 
       
  2841 exchange_message :: Socket -> [Bytes] -> IO (Maybe [Bytes])
       
  2842 exchange_message socket msg = do
       
  2843   write_message socket msg
       
  2844   read_message socket
  2840 
  2845 
  2841 
  2846 
  2842 -- hybrid messages: line or length+block (with content restriction)
  2847 -- hybrid messages: line or length+block (with content restriction)
  2843 
  2848 
  2844 is_length :: Bytes -> Bool
  2849 is_length :: Bytes -> Bool