HTTP-4000.2.19: A library for client-side HTTP

CopyrightSee LICENSE file
LicenseBSD
MaintainerGanesh Sittampalam <ganesh@earth.li>
Stabilityexperimental
Portabilitynon-portable (not tested)
Safe HaskellSafe-Inferred
LanguageHaskell98

Network.BufferType

Description

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.)

Synopsis

Documentation

class BufferType bufType where Source

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.

Methods

bufferOps :: BufferOp bufType Source

data BufferOp a Source

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

Constructors

BufferOp 

Fields

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
 

Instances

Eq (BufferOp a) 

strictBufferOp :: BufferOp ByteString Source

strictBufferOp is the BufferOp definition over ByteStrings, the non-lazy kind.

lazyBufferOp :: BufferOp ByteString Source

lazyBufferOp is the BufferOp definition over ByteStrings, the non-strict kind.

stringBufferOp :: BufferOp String Source

stringBufferOp is the BufferOp definition over Strings. It is defined in terms of strictBufferOp operations, unpacking/converting to String when needed.