Portability | non-portable (not tested) |
---|---|
Stability | experimental |
Maintainer | Ganesh Sittampalam <ganesh@earth.li> |
Safe Haskell | Safe-Inferred |
In order to give the user freedom in how request and response content
is represented, a sufficiently abstract representation is needed of
these internally. The Network.BufferType module provides this, defining
the BufferType
class and its ad-hoc representation of buffer operations
via the BufferOp
record.
This module provides definitions for the standard buffer types that the
package supports, i.e., for String
and ByteString
(strict and lazy.)
- class BufferType bufType where
- data BufferOp a = BufferOp {
- buf_hGet :: Handle -> Int -> IO a
- buf_hGetContents :: Handle -> IO a
- buf_hPut :: Handle -> a -> IO ()
- buf_hGetLine :: Handle -> IO a
- buf_empty :: a
- buf_append :: a -> a -> a
- buf_concat :: [a] -> a
- buf_fromStr :: String -> a
- buf_toStr :: a -> String
- buf_snoc :: a -> Word8 -> a
- buf_splitAt :: Int -> a -> (a, a)
- buf_span :: (Char -> Bool) -> a -> (a, a)
- buf_isLineTerm :: a -> Bool
- buf_isEmpty :: a -> Bool
- strictBufferOp :: BufferOp ByteString
- lazyBufferOp :: BufferOp ByteString
- stringBufferOp :: BufferOp String
Documentation
class BufferType bufType whereSource
The BufferType
class encodes, in a mixed-mode way, the interface
that the library requires to operate over data embedded in HTTP
requests and responses. That is, we use explicit dictionaries
for the operations, but overload the name of the dicts themselves.
BufferOp
encodes the I/O operations of the underlying buffer over
a Handle in an (explicit) dictionary type. May not be needed, but gives
us flexibility in explicit overriding and wrapping up of these methods.
Along with IO operations is an ad-hoc collection of functions for working with these abstract buffers, as needed by the internals of the code that processes requests and responses.
We supply three default BufferOp
values, for String
along with the
strict and lazy versions of ByteString
. To add others, provide BufferOp
definitions for
BufferOp | |
|
strictBufferOp :: BufferOp ByteStringSource
strictBufferOp
is the BufferOp
definition over ByteString
s,
the non-lazy kind.
lazyBufferOp :: BufferOp ByteStringSource
lazyBufferOp
is the BufferOp
definition over ByteString
s,
the non-strict kind.
stringBufferOp :: BufferOp StringSource
stringBufferOp
is the BufferOp
definition over String
s.
It is defined in terms of strictBufferOp
operations,
unpacking/converting to String
when needed.