Dear Haskellers. I would like to build simple UDP server application. To parse a packet, I decide to use Data.Binary as followings: data Packet = Packet { foo :: Word16, bar :: Word16, baz :: Word32 } deriving (Show, Eq) instance Binary Packet where get = do foo <- get :: Get Word16 bar <- get :: Get Word16 baz <- get :: Get Word32 return (Packet foo bar baz) -- omitting put because we're now just receiving only serveUDP port handlerfunc = withSocketsDo $ do ... procMessages sock where procMessages sock = do (msg, _, addr) <- recvFrom sock 10240 handlerfunc addr msg procMessages sock myHandler addr msg = do putStrLn $ decode (Data.ByteString.Lazy.Char8.Pack msg) run = serveUDP "8080" myHandler But, running it and sending sample udp packet results in following exception. *Main> run Loading package syb ... linking ... done. Loading package base-3.0.3.1 ... linking ... done. Loading package array-0.2.0.0 ... linking ... done. Loading package containers-0.2.0.1 ... linking ... done. Loading package bytestring-0.9.1.4 ... linking ... done. Loading package parsec-2.1.0.1 ... linking ... done. Loading package network-2.2.1 ... linking ... done. Loading package binary-0.5.0.1 ... linking ... done. *** Exception: too few bytes. Failed reading at byte position 9 *Main> Why and what can I do for this? Thanks in advance. Chul-Woong Yang