uniform-io-1.0.0.0: Uniform IO over files, network, anything.

Safe HaskellSafe
LanguageHaskell2010

System.IO.Uniform

Description

Uniform-IO provides a typeclass for uniform access of different types of targets, and implementations for abstracting standard streams, files and network connections. This module also provides TLS wraping over other IO targets.

Synopsis

Documentation

class UniformIO a where Source #

Typeclass for uniform IO targets.

Minimal complete definition

uRead, uPut, uClose, startTls, isSecure

Methods

uRead :: a -> Int -> IO ByteString Source #

uRead fd n

Reads a block of at most n bytes of data from the IO target. Reading will block if there's no data available, but will return immediately if any amount of data is availble.

Must thow System.IO.Error.EOFError if reading beihond EOF.

uPut :: a -> ByteString -> IO () Source #

uPut fd text

Writes all the bytes of text into the IO target. Takes care of retrying if needed.

uClose :: a -> IO () Source #

fClose fd

Closes the IO target, releasing any allocated resource. Resources may leak if not called for every oppened fd.

startTls :: TlsSettings -> a -> IO TlsIO Source #

startTLS fd

Starts a TLS connection over the IO target.

isSecure :: a -> Bool Source #

isSecure fd

Indicates whether the data written or read from fd is secure at transport.

Instances

UniformIO TlsIO Source #

UniformIO wrapper that applies TLS to communication on IO target. This type is constructed by calling startTls on other targets.

UniformIO SomeIO Source # 
UniformIO ByteStringIO Source # 

data SomeIO Source #

A type that wraps any type in the UniformIO class.

Constructors

UniformIO a => SomeIO a 

data TlsIO Source #

Instances

UniformIO TlsIO Source #

UniformIO wrapper that applies TLS to communication on IO target. This type is constructed by calling startTls on other targets.

mapOverInput :: forall a io. UniformIO io => io -> Int -> (a -> ByteString -> IO a) -> a -> IO a Source #

mapOverInput io block_size f initial Reads io untill the end of file, evaluating a(i) <- f a(i-1) read_data where a(0) = initial and the last value after io reaches EOF is returned.

Notice that the length of read_data might not be equal block_size.