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

Safe HaskellSafe-Inferred



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.



class UniformIO a where Source

Typeclass for uniform IO targets.


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


UniformIO StdIO

UniformIO that reads from stdin and writes to stdout.

UniformIO FileIO

UniformIO type for file IO.

UniformIO SocketIO

UniformIO IP connections.

UniformIO SomeIO 
UniformIO ByteStringIO 

data TlsSettings Source

Settings for starttls functions.

data SomeIO Source

A type that wraps any type in the UniformIO class.


forall a . UniformIO a => SomeIO a 


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.