hGet is:exact

Read a ByteString directly from the specified Handle. This is far more efficient than reading the characters into a String and then using pack. First argument is the Handle to read from, and the second is the number of bytes to read. It returns the bytes read, up to n, or empty if EOF has been reached. hGet is implemented in terms of hGetBuf. If the handle is a pipe or socket, and the writing end is closed, hGet will behave as if EOF was reached.
Read n bytes into a ByteString, directly from the specified Handle.
Lifted hGet
Lifted hGet
Convert a handle into a byte stream using a fixed chunk size hGet waits until exactly the requested number of bytes are available for each chunk.
Read Bytes directly from the specified Handle. The resulting Bytes are pinned. This is implemented with hGetBuf.
Read n bytes into a ByteStream, directly from the specified Handle.
Read specified number of bytes. See hGet for particular semantics.
Read a Vector directly from the specified Handle. This is far more efficient than reading the characters into a list and then using pack.
Read binary data directly from the specified Handle. First argument is the Handle to read from, and the second is the number of bytes to read. It returns the bytes read, up to the specified size, or an empty array if EOF has been reached. hGet is implemented in terms of hGetBuf.
Gets any data from HSet for you