Network.Stream

HTTP-4000.4.1: A library for client-side HTTP

Copyright | See LICENSE file
License | BSD
Maintainer | Ganesh Sittampalam <ganesh@earth.li>
Stability | experimental
Portability | non-portable (not tested)
Safe Haskell | Safe-Inferred
Language | Haskell98

Network.Stream

Description

An library for creating abstract streams. Originally part of Gray's/Bringert's HTTP module.

- Changes by Robin Bate Boerop robin@bateboerop.name:
- Removed unnecessary import statements.
- Moved Debug code to StreamDebugger.hs
- Moved Socket-related code to StreamSocket.hs.
- Changes by Simon Foster:
- Split Network.HTTPmodule up into to separate Network.[Stream,TCP,HTTP] modules

Synopsis

- class Stream x where
  - readLine :: x -> IO (Result String)
  - readBlock :: x -> Int -> IO (Result String)
  - writeBlock :: x -> String -> IO (Result ())
  - close :: x -> IO ()
  - closeOnEnd :: x -> Bool -> IO ()
- data ConnError
  - = ErrorReset
  - | ErrorClosed
  - | ErrorParse String
  - | ErrorMisc String
- type Result a = Either ConnError a
- bindE :: Result a -> (a -> Result b) -> Result b
- fmapE :: (a -> Result b) -> IO (Result a) -> IO (Result b)
- failParse :: String -> Result a
- failWith :: ConnError -> Result a
- failMisc :: String -> Result a

# Documentation

class Stream x where #

Streams should make layering of TLS protocol easier in future, they allow reading/writing to files etc for debugging, they allow use of protocols other than TCP/IP and they allow customisation.

Instances of this class should not trim the input in any way, e.g. leave LF on line endings etc. Unless that is exactly the behaviour you want from your twisted instances ;)

Methods

readLine :: x -> IO (Result String) #

readBlock :: x -> Int -> IO (Result String) #

writeBlock :: x -> String -> IO (Result ()) #

close :: x -> IO () #

closeOnEnd #

Arguments

:: x |
-> Bool |
-> IO () | True => shutdown the connection when response has been read / end-of-stream has been reached.

#### Instances

Instances details

Stream Connection # |
Instance details Defined in Network.TCP Methods readLine :: Connection -> IO (Result String) # readBlock :: Connection -> Int -> IO (Result String) # writeBlock :: Connection -> String -> IO (Result ()) # close :: Connection -> IO () # closeOnEnd :: Connection -> Bool -> IO () #
Stream Socket # |
Instance details Defined in Network.StreamSocket Methods readLine :: Socket -> IO (Result String) # readBlock :: Socket -> Int -> IO (Result String) # writeBlock :: Socket -> String -> IO (Result ()) # close :: Socket -> IO () # closeOnEnd :: Socket -> Bool -> IO () #
Stream x => Stream (StreamDebugger x) # |
Instance details Defined in Network.StreamDebugger Methods readLine :: StreamDebugger x -> IO (Result String) # readBlock :: StreamDebugger x -> Int -> IO (Result String) # writeBlock :: StreamDebugger x -> String -> IO (Result ()) # close :: StreamDebugger x -> IO () # closeOnEnd :: StreamDebugger x -> Bool -> IO () #

data ConnError #

Constructors

ErrorReset |
ErrorClosed |
ErrorParse String |
ErrorMisc String |

#### Instances

Instances details

Show ConnError # |
Instance details Defined in Network.Stream Methods showsPrec :: Int -> ConnError -> ShowS # show :: ConnError -> String # showList :: [ConnError] -> ShowS #
Eq ConnError # |
Instance details Defined in Network.Stream Methods (==) :: ConnError -> ConnError -> Bool # (/=) :: ConnError -> ConnError -> Bool #

type Result a = Either ConnError a #

This is the type returned by many exported network functions.

bindE :: Result a -> (a -> Result b) -> Result b #

fmapE :: (a -> Result b) -> IO (Result a) -> IO (Result b) #

failParse :: String -> Result a #

failWith :: ConnError -> Result a #

failMisc :: String -> Result a #