|
@@ -1,13 +1,10 @@
|
|
|
{-# LANGUAGE ExistentialQuantification #-}
|
|
|
--- {-# LANGUAGE OverloadedStrings #-}
|
|
|
--- {-# LANGUAGE ForeignFunctionInterface #-}
|
|
|
--- {-# LANGUAGE InterruptibleFFI #-}
|
|
|
--- {-# LANGUAGE EmptyDataDecls #-}
|
|
|
|
|
|
--- |
|
|
|
--- 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.
|
|
|
+{- |
|
|
|
+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.
|
|
|
+-}
|
|
|
module System.IO.Uniform (
|
|
|
UniformIO(..),
|
|
|
TlsSettings(..),
|
|
@@ -22,16 +19,17 @@ import System.IO.Error
|
|
|
|
|
|
import Data.Default.Class
|
|
|
|
|
|
--- |
|
|
|
--- Typeclass for uniform IO targets.
|
|
|
+-- | Typeclass for uniform IO targets.
|
|
|
class UniformIO a where
|
|
|
- -- | 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.
|
|
|
+ {- |
|
|
|
+ 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.
|
|
|
+ -}
|
|
|
uRead :: a -> Int -> IO ByteString
|
|
|
-- | uPut fd text
|
|
|
--
|
|
@@ -67,11 +65,14 @@ data TlsSettings = TlsSettings {tlsPrivateKeyFile :: String, tlsCertificateChain
|
|
|
instance Default TlsSettings where
|
|
|
def = TlsSettings "" "" ""
|
|
|
|
|
|
--- | 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.
|
|
|
+{- |
|
|
|
+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.
|
|
|
+-}
|
|
|
mapOverInput :: forall a io. UniformIO io => io -> Int -> (a -> ByteString -> IO a) -> a -> IO a
|
|
|
mapOverInput io block f initial = do
|
|
|
a <- tryIOError $ uRead io block
|