Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- sequenceIdInputStream :: Integral s => s -> (a -> s) -> (SequenceIdError s -> IO ()) -> InputStream a -> IO (InputStream a)
- sequenceIdOutputStream :: Integral s => s -> (s -> a -> b) -> OutputStream b -> IO (OutputStream a)
Documentation
sequenceIdInputStream Source #
:: Integral s | |
=> s | Initial sequence ID |
-> (a -> s) | Function applied to each element of the stream to get the sequence ID |
-> (SequenceIdError s -> IO ()) | Error handler |
-> InputStream a |
|
-> IO (InputStream a) | Pass-through of the given stream |
Wrap an InputStream
and check for dropped or duplicated sequence IDs.
Example:
ghci>fromList
[1..10 ::SequenceId
] >>=sequenceIdInputStream
0id
(fail
.show
) >>=toList
[1,2,3,4,5,6,7,8,9,10] ghci>fromList
[5..10 ::SequenceId
] >>=sequenceIdInputStream
0id
(fail
.show
) >>=toList
*** Exception: user error (SequenceIdError
{errType =SequenceIdDropped
, lastSeqId = 0, currSeqId = 5}) ghci>fromList
[1..10 ::SequenceId
] >>=sequenceIdInputStream
5id
(fail
.show
) >>=toList
*** Exception: user error (SequenceIdError
{errType =SequenceIdDuplicated
, lastSeqId = 5, currSeqId = 1})
sequenceIdOutputStream Source #
:: Integral s | |
=> s | Initial sequence ID |
-> (s -> a -> b) | Transformation function |
-> OutputStream b |
|
-> IO (OutputStream a) | ( |
Wrap an OutputStream
to give a sequence ID for each element written.
Example:
(outStream', getSeqId) <-sequenceIdOutputStream
1 outStream return $contramapM
(addSeqId getSeqId) outStream'