------------------------------------------------------------------------------- |-- Module : Network.Stream-- Copyright : See LICENSE file-- License : BSD---- Maintainer : Ganesh Sittampalam <ganesh@earth.li>-- Stability : experimental-- Portability : non-portable (not tested)---- 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-----------------------------------------------------------------------------moduleNetwork.Stream(Stream (..),ConnError (..),Result ,bindE ,fmapE ,failParse -- :: String -> Result a,failWith -- :: ConnError -> Result a,failMisc -- :: String -> Result a)wheredataConnError =ErrorReset |ErrorClosed |ErrorParse String|ErrorMisc Stringderiving(Int -> ConnError -> ShowS
[ConnError] -> ShowS
ConnError -> String
(Int -> ConnError -> ShowS)
-> (ConnError -> String)
-> ([ConnError] -> ShowS)
-> Show ConnError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConnError] -> ShowS
$cshowList :: [ConnError] -> ShowS
show :: ConnError -> String
$cshow :: ConnError -> String
showsPrec :: Int -> ConnError -> ShowS
$cshowsPrec :: Int -> ConnError -> ShowS
Show,ConnError -> ConnError -> Bool
(ConnError -> ConnError -> Bool)
-> (ConnError -> ConnError -> Bool) -> Eq ConnError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConnError -> ConnError -> Bool
$c/= :: ConnError -> ConnError -> Bool
== :: ConnError -> ConnError -> Bool
$c== :: ConnError -> ConnError -> Bool
Eq)-- in GHC 7.0 the Monad instance for Error no longer-- uses fail x = Left (strMsg x). failMisc is therefore-- used instead.failMisc ::String->Result a failMisc :: String -> Result a
failMisc String
x =ConnError -> Result a
forall a. ConnError -> Result a
failWith (String -> ConnError
ErrorMisc String
x )failParse ::String->Result a failParse :: String -> Result a
failParse String
x =ConnError -> Result a
forall a. ConnError -> Result a
failWith (String -> ConnError
ErrorParse String
x )failWith ::ConnError ->Result a failWith :: ConnError -> Result a
failWith ConnError
x =ConnError -> Result a
forall a b. a -> Either a b
LeftConnError
x bindE ::Result a ->(a ->Result b )->Result b bindE :: Result a -> (a -> Result b) -> Result b
bindE (LeftConnError
e )a -> Result b
_=ConnError -> Result b
forall a b. a -> Either a b
LeftConnError
e bindE (Righta
v )a -> Result b
f =a -> Result b
f a
v fmapE ::(a ->Result b )->IO(Result a )->IO(Result b )fmapE :: (a -> Result b) -> IO (Result a) -> IO (Result b)
fmapE a -> Result b
f IO (Result a)
a =doResult a
x <-IO (Result a)
a caseResult a
x ofLeftConnError
e ->Result b -> IO (Result b)
forall (m :: * -> *) a. Monad m => a -> m a
return(ConnError -> Result b
forall a b. a -> Either a b
LeftConnError
e )Righta
r ->Result b -> IO (Result b)
forall (m :: * -> *) a. Monad m => a -> m a
return(a -> Result b
f a
r )-- | This is the type returned by many exported network functions.typeResult a =EitherConnError {- error -}a {- result -}-- | 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 ;)classStream x wherereadLine ::x ->IO(Result String)readBlock ::x ->Int->IO(Result String)writeBlock ::x ->String->IO(Result ())close ::x ->IO()closeOnEnd ::x ->Bool->IO()-- ^ True => shutdown the connection when response has been read / end-of-stream-- has been reached.

AltStyle によって変換されたページ (->オリジナル) /