Safe Haskell | None |
---|
Please see the project README for more details:
https:github.comjwiegleysimple-conduitblobmaster/README.md
Also see this blog article:
https:www.newartisans.com201406/simpler-conduit-library
- newtype Source m a = Source {}
- type Conduit a m b = Source m a -> Source m b
- type Sink a m r = Source m a -> m r
- sequenceSources :: (Traversable f, Monad m) => f (Source m a) -> Source m (f a)
- returnC :: Monad m => m a -> Source m a
- ($=) :: a -> (a -> b) -> b
- (=$) :: (a -> b) -> (b -> c) -> a -> c
- ($$) :: a -> (a -> b) -> b
- rewrap :: Monad m => (a -> b) -> EitherT a m a -> EitherT b m b
- rewrapM :: Monad m => (a -> EitherT b m b) -> EitherT a m a -> EitherT b m b
- resolve :: Monad m => (r -> a -> EitherT r m r) -> r -> a -> m r
- yieldMany :: (Monad m, MonoFoldable mono) => mono -> Source m (Element mono)
- sourceList :: (Monad m, MonoFoldable mono) => mono -> Source m (Element mono)
- yieldOne :: Monad m => a -> Source m a
- unfoldC :: forall m a b. Monad m => (b -> Maybe (a, b)) -> b -> Source m a
- enumFromToC :: forall m a. (Monad m, Enum a, Eq a) => a -> a -> Source m a
- iterateC :: forall m a. Monad m => (a -> a) -> a -> Source m a
- repeatC :: forall m a. Monad m => a -> Source m a
- replicateC :: forall m a. Monad m => Int -> a -> Source m a
- sourceLazy :: (Monad m, LazySequence lazy strict) => lazy -> Source m strict
- repeatMC :: forall m a. Monad m => m a -> Source m a
- repeatWhileMC :: forall m a. Monad m => m a -> (a -> Bool) -> Source m a
- replicateMC :: forall m a. Monad m => Int -> m a -> Source m a
- sourceHandle :: forall m a. (MonadIO m, IOData a) => Handle -> Source m a
- sourceFile :: (MonadBaseControl IO m, MonadIO m, IOData a) => FilePath -> Source m a
- sourceIOHandle :: (MonadBaseControl IO m, MonadIO m, IOData a) => IO Handle -> Source m a
- stdinC :: (MonadBaseControl IO m, MonadIO m, IOData a) => Source m a
- initRepeat :: Monad m => m seed -> (seed -> m a) -> Source m a
- initReplicate :: Monad m => m seed -> (seed -> m a) -> Int -> Source m a
- sourceRandom :: (Variate a, MonadIO m) => Source m a
- sourceRandomN :: (Variate a, MonadIO m) => Int -> Source m a
- sourceRandomGen :: (Variate a, MonadBase base m, PrimMonad base) => Gen (PrimState base) -> Source m a
- sourceRandomNGen :: (Variate a, MonadBase base m, PrimMonad base) => Gen (PrimState base) -> Int -> Source m a
- sourceDirectory :: forall m. (MonadBaseControl IO m, MonadIO m) => FilePath -> Source m FilePath
- sourceDirectoryDeep :: forall m. (MonadBaseControl IO m, MonadIO m) => Bool -> FilePath -> Source m FilePath
- dropC :: Monad m => Int -> Conduit a m a
- dropCE :: (Monad m, IsSequence seq) => Index seq -> Conduit seq m seq
- dropWhileC :: Monad m => (a -> Bool) -> Conduit a m a
- dropWhileCE :: (Monad m, IsSequence seq) => (Element seq -> Bool) -> Conduit seq m seq
- foldC :: (Monad m, Monoid a) => Sink a m a
- foldCE :: (Monad m, MonoFoldable mono, Monoid (Element mono)) => Sink mono m (Element mono)
- foldlC :: Monad m => (a -> b -> a) -> a -> Sink b m a
- foldlCE :: (Monad m, MonoFoldable mono) => (a -> Element mono -> a) -> a -> Sink mono m a
- foldMapC :: (Monad m, Monoid b) => (a -> b) -> Sink a m b
- foldMapCE :: (Monad m, MonoFoldable mono, Monoid w) => (Element mono -> w) -> Sink mono m w
- allC :: Monad m => (a -> Bool) -> Sink a m Bool
- allCE :: (Monad m, MonoFoldable mono) => (Element mono -> Bool) -> Sink mono m Bool
- anyC :: Monad m => (a -> Bool) -> Sink a m Bool
- anyCE :: (Monad m, MonoFoldable mono) => (Element mono -> Bool) -> Sink mono m Bool
- andC :: Monad m => Sink Bool m Bool
- andCE :: (Monad m, MonoFoldable mono, Element mono ~ Bool) => Sink mono m Bool
- orC :: Monad m => Sink Bool m Bool
- orCE :: (Monad m, MonoFoldable mono, Element mono ~ Bool) => Sink mono m Bool
- elemC :: (Monad m, Eq a) => a -> Sink a m Bool
- elemCE :: (Monad m, EqSequence seq) => Element seq -> Sink seq m Bool
- notElemC :: (Monad m, Eq a) => a -> Sink a m Bool
- notElemCE :: (Monad m, EqSequence seq) => Element seq -> Sink seq m Bool
- produceList :: Monad m => ([a] -> b) -> Source m a -> m b
- sinkLazy :: (Monad m, LazySequence lazy strict) => Sink strict m lazy
- sinkList :: Monad m => Sink a m [a]
- sinkVector :: (MonadBase base m, Vector v a, PrimMonad base) => Sink a m (v a)
- sinkVectorN :: (MonadBase base m, Vector v a, PrimMonad base) => Int -> Sink a m (v a)
- sinkBuilder :: (Monad m, Monoid builder, ToBuilder a builder) => Sink a m builder
- sinkLazyBuilder :: (Monad m, Monoid builder, ToBuilder a builder, Builder builder lazy) => Sink a m lazy
- sinkNull :: Monad m => Sink a m ()
- awaitNonNull :: (Monad m, MonoFoldable a) => Conduit a m (Maybe (NonNull a))
- headCE :: (Monad m, IsSequence seq) => Sink seq m (Maybe (Element seq))
- lastC :: Monad m => Sink a m (Maybe a)
- lastCE :: (Monad m, IsSequence seq) => Sink seq m (Maybe (Element seq))
- lengthC :: (Monad m, Num len) => Sink a m len
- lengthCE :: (Monad m, Num len, MonoFoldable mono) => Sink mono m len
- lengthIfC :: (Monad m, Num len) => (a -> Bool) -> Sink a m len
- lengthIfCE :: (Monad m, Num len, MonoFoldable mono) => (Element mono -> Bool) -> Sink mono m len
- maximumC :: (Monad m, Ord a) => Sink a m (Maybe a)
- maximumCE :: (Monad m, OrdSequence seq) => Sink seq m (Maybe (Element seq))
- minimumC :: (Monad m, Ord a) => Sink a m (Maybe a)
- minimumCE :: (Monad m, OrdSequence seq) => Sink seq m (Maybe (Element seq))
- sumC :: (Monad m, Num a) => Sink a m a
- sumCE :: (Monad m, MonoFoldable mono, Num (Element mono)) => Sink mono m (Element mono)
- productC :: (Monad m, Num a) => Sink a m a
- productCE :: (Monad m, MonoFoldable mono, Num (Element mono)) => Sink mono m (Element mono)
- findC :: Monad m => (a -> Bool) -> Sink a m (Maybe a)
- mapM_C :: Monad m => (a -> m ()) -> Sink a m ()
- mapM_CE :: (Monad m, MonoFoldable mono) => (Element mono -> m ()) -> Sink mono m ()
- foldMC :: Monad m => (a -> b -> m a) -> a -> Sink b m a
- foldMCE :: (Monad m, MonoFoldable mono) => (a -> Element mono -> m a) -> a -> Sink mono m a
- foldMapMC :: (Monad m, Monoid w) => (a -> m w) -> Sink a m w
- foldMapMCE :: (Monad m, MonoFoldable mono, Monoid w) => (Element mono -> m w) -> Sink mono m w
- sinkFile :: (MonadBaseControl IO m, MonadIO m, IOData a) => FilePath -> Sink a m ()
- sinkHandle :: (MonadIO m, IOData a) => Handle -> Sink a m ()
- sinkIOHandle :: (MonadBaseControl IO m, MonadIO m, IOData a) => IO Handle -> Sink a m ()
- printC :: (Show a, MonadIO m) => Sink a m ()
- stdoutC :: (MonadIO m, IOData a) => Sink a m ()
- stderrC :: (MonadIO m, IOData a) => Sink a m ()
- mapC :: Monad m => (a -> b) -> Conduit a m b
- mapC' :: Monad m => (a -> b) -> Conduit a m b
- mapCE :: (Monad m, Functor f) => (a -> b) -> Conduit (f a) m (f b)
- omapCE :: (Monad m, MonoFunctor mono) => (Element mono -> Element mono) -> Conduit mono m mono
- concatMapC :: (Monad m, MonoFoldable mono) => (a -> mono) -> Conduit a m (Element mono)
- concatMapCE :: (Monad m, MonoFoldable mono, Monoid w) => (Element mono -> w) -> Conduit mono m w
- takeC :: Monad m => Int -> Source m a -> Source m a
- takeCE :: (Monad m, IsSequence seq) => Index seq -> Conduit seq m seq
- takeWhileC :: Monad m => (a -> Bool) -> Source m a -> Source m a
- takeWhileCE :: (Monad m, IsSequence seq) => (Element seq -> Bool) -> Conduit seq m seq
- takeExactlyC :: Monad m => Int -> Conduit a m b -> Conduit a m b
- takeExactlyCE :: (Monad m, IsSequence a) => Index a -> Conduit a m b -> Conduit a m b
- concatC :: (Monad m, MonoFoldable mono) => Conduit mono m (Element mono)
- filterC :: Monad m => (a -> Bool) -> Conduit a m a
- filterCE :: (IsSequence seq, Monad m) => (Element seq -> Bool) -> Conduit seq m seq
- mapWhileC :: Monad m => (a -> Maybe b) -> Conduit a m b
- conduitVector :: (MonadBase base m, Vector v a, PrimMonad base) => Int -> Conduit a m (v a)
- scanlC :: Monad m => (a -> b -> a) -> a -> Conduit b m a
- concatMapAccumC :: Monad m => (a -> accum -> (accum, [b])) -> accum -> Conduit a m b
- intersperseC :: Monad m => a -> Source m a -> Source m a
- encodeBase64C :: Monad m => Conduit ByteString m ByteString
- decodeBase64C :: Monad m => Conduit ByteString m ByteString
- encodeBase64URLC :: Monad m => Conduit ByteString m ByteString
- decodeBase64URLC :: Monad m => Conduit ByteString m ByteString
- encodeBase16C :: Monad m => Conduit ByteString m ByteString
- decodeBase16C :: Monad m => Conduit ByteString m ByteString
- mapMC :: Monad m => (a -> m b) -> Conduit a m b
- mapMCE :: (Monad m, Traversable f) => (a -> m b) -> Conduit (f a) m (f b)
- omapMCE :: (Monad m, MonoTraversable mono) => (Element mono -> m (Element mono)) -> Conduit mono m mono
- concatMapMC :: (Monad m, MonoFoldable mono) => (a -> m mono) -> Conduit a m (Element mono)
- filterMC :: Monad m => (a -> m Bool) -> Conduit a m a
- filterMCE :: (Monad m, IsSequence seq) => (Element seq -> m Bool) -> Conduit seq m seq
- iterMC :: Monad m => (a -> m ()) -> Conduit a m a
- scanlMC :: Monad m => (a -> b -> m a) -> a -> Conduit b m a
- concatMapAccumMC :: Monad m => (a -> accum -> m (accum, [b])) -> accum -> Conduit a m b
- encodeUtf8C :: (Monad m, Utf8 text binary) => Conduit text m binary
- decodeUtf8C :: MonadThrow m => Conduit ByteString m Text
- lineC :: (Monad m, IsSequence seq, Element seq ~ Char) => Conduit seq m o -> Conduit seq m o
- lineAsciiC :: (Monad m, IsSequence seq, Element seq ~ Word8) => Conduit seq m o -> Conduit seq m o
- unlinesC :: (Monad m, IsSequence seq, Element seq ~ Char) => Conduit seq m seq
- unlinesAsciiC :: (Monad m, IsSequence seq, Element seq ~ Word8) => Conduit seq m seq
- linesUnboundedC_ :: forall m seq. (Monad m, IsSequence seq, Eq (Element seq)) => Element seq -> Conduit seq m seq
- linesUnboundedC :: (Monad m, IsSequence seq, Element seq ~ Char) => Conduit seq m seq
- linesUnboundedAsciiC :: (Monad m, IsSequence seq, Element seq ~ Word8) => Conduit seq m seq
- awaitForever :: Monad m => (forall r. a -> (b -> EitherT r m r) -> EitherT r m r -> EitherT r m r) -> Conduit a m b
- asyncC :: (MonadBaseControl IO m, Monad m) => (a -> m b) -> Conduit a m (Async (StM m b))
- fromFoldM :: Monad m => FoldM m a b -> Source m a -> m b
- toFoldM :: Monad m => Sink a m r -> (forall s. FoldM (EitherT s m) a s -> EitherT s m s) -> m r
- sourceTChan :: forall a. TChan a -> Source STM a
- sourceTQueue :: forall a. TQueue a -> Source STM a
- sourceTBQueue :: forall a. TBQueue a -> Source STM a
- untilMC :: forall m a. Monad m => m a -> m Bool -> Source m a
- whileMC :: forall m a. Monad m => m Bool -> m a -> Source m a
Documentation
sequenceSources :: (Traversable f, Monad m) => f (Source m a) -> Source m (f a)Source
Sequence a collection of sources.
>>>
sinkList $ sequenceSources [yieldOne 1, yieldOne 2, yieldOne 3]
[[1,2,3]]
rewrap :: Monad m => (a -> b) -> EitherT a m a -> EitherT b m bSource
This is just like bimapEitherT
, but it only
requires a Monad
constraint rather than Functor
.
sourceList :: (Monad m, MonoFoldable mono) => mono -> Source m (Element mono)Source
replicateC :: forall m a. Monad m => Int -> a -> Source m aSource
sourceLazy :: (Monad m, LazySequence lazy strict) => lazy -> Source m strictSource
repeatWhileMC :: forall m a. Monad m => m a -> (a -> Bool) -> Source m aSource
replicateMC :: forall m a. Monad m => Int -> m a -> Source m aSource
sourceFile :: (MonadBaseControl IO m, MonadIO m, IOData a) => FilePath -> Source m aSource
sourceIOHandle :: (MonadBaseControl IO m, MonadIO m, IOData a) => IO Handle -> Source m aSource
initRepeat :: Monad m => m seed -> (seed -> m a) -> Source m aSource
initReplicate :: Monad m => m seed -> (seed -> m a) -> Int -> Source m aSource
sourceRandom :: (Variate a, MonadIO m) => Source m aSource
sourceRandomGen :: (Variate a, MonadBase base m, PrimMonad base) => Gen (PrimState base) -> Source m aSource
sourceRandomNGen :: (Variate a, MonadBase base m, PrimMonad base) => Gen (PrimState base) -> Int -> Source m aSource
sourceDirectory :: forall m. (MonadBaseControl IO m, MonadIO m) => FilePath -> Source m FilePathSource
sourceDirectoryDeep :: forall m. (MonadBaseControl IO m, MonadIO m) => Bool -> FilePath -> Source m FilePathSource
dropWhileC :: Monad m => (a -> Bool) -> Conduit a m aSource
dropWhileCE :: (Monad m, IsSequence seq) => (Element seq -> Bool) -> Conduit seq m seqSource
produceList :: Monad m => ([a] -> b) -> Source m a -> m bSource
sinkLazy :: (Monad m, LazySequence lazy strict) => Sink strict m lazySource
sinkLazyBuilder :: (Monad m, Monoid builder, ToBuilder a builder, Builder builder lazy) => Sink a m lazySource
awaitNonNull :: (Monad m, MonoFoldable a) => Conduit a m (Maybe (NonNull a))Source
lengthIfCE :: (Monad m, Num len, MonoFoldable mono) => (Element mono -> Bool) -> Sink mono m lenSource
foldMapMCE :: (Monad m, MonoFoldable mono, Monoid w) => (Element mono -> m w) -> Sink mono m wSource
sinkIOHandle :: (MonadBaseControl IO m, MonadIO m, IOData a) => IO Handle -> Sink a m ()Source
omapCE :: (Monad m, MonoFunctor mono) => (Element mono -> Element mono) -> Conduit mono m monoSource
concatMapC :: (Monad m, MonoFoldable mono) => (a -> mono) -> Conduit a m (Element mono)Source
concatMapCE :: (Monad m, MonoFoldable mono, Monoid w) => (Element mono -> w) -> Conduit mono m wSource
takeWhileC :: Monad m => (a -> Bool) -> Source m a -> Source m aSource
This function reads one more element than it yields, which would be a problem if Sinks were monadic, as they are in conduit or pipes. There is no such concept as resuming where the last conduit left off in this library.
takeWhileCE :: (Monad m, IsSequence seq) => (Element seq -> Bool) -> Conduit seq m seqSource
takeExactlyCE :: (Monad m, IsSequence a) => Index a -> Conduit a m b -> Conduit a m bSource
concatMapAccumC :: Monad m => (a -> accum -> (accum, [b])) -> accum -> Conduit a m bSource
intersperseC :: Monad m => a -> Source m a -> Source m aSource
encodeBase64C :: Monad m => Conduit ByteString m ByteStringSource
decodeBase64C :: Monad m => Conduit ByteString m ByteStringSource
encodeBase64URLC :: Monad m => Conduit ByteString m ByteStringSource
decodeBase64URLC :: Monad m => Conduit ByteString m ByteStringSource
encodeBase16C :: Monad m => Conduit ByteString m ByteStringSource
decodeBase16C :: Monad m => Conduit ByteString m ByteStringSource
mapMCE :: (Monad m, Traversable f) => (a -> m b) -> Conduit (f a) m (f b)Source
omapMCE :: (Monad m, MonoTraversable mono) => (Element mono -> m (Element mono)) -> Conduit mono m monoSource
concatMapMC :: (Monad m, MonoFoldable mono) => (a -> m mono) -> Conduit a m (Element mono)Source
concatMapAccumMC :: Monad m => (a -> accum -> m (accum, [b])) -> accum -> Conduit a m bSource
encodeUtf8C :: (Monad m, Utf8 text binary) => Conduit text m binarySource
decodeUtf8C :: MonadThrow m => Conduit ByteString m TextSource
lineAsciiC :: (Monad m, IsSequence seq, Element seq ~ Word8) => Conduit seq m o -> Conduit seq m oSource
unlinesAsciiC :: (Monad m, IsSequence seq, Element seq ~ Word8) => Conduit seq m seqSource
linesUnboundedC_ :: forall m seq. (Monad m, IsSequence seq, Eq (Element seq)) => Element seq -> Conduit seq m seqSource
linesUnboundedC :: (Monad m, IsSequence seq, Element seq ~ Char) => Conduit seq m seqSource
linesUnboundedAsciiC :: (Monad m, IsSequence seq, Element seq ~ Word8) => Conduit seq m seqSource
awaitForever :: Monad m => (forall r. a -> (b -> EitherT r m r) -> EitherT r m r -> EitherT r m r) -> Conduit a m bSource
The use of awaitForever
in this library is just a bit different from
conduit:
>>>
awaitForever $ \x yield done -> if even x then yield x else done
fromFoldM :: Monad m => FoldM m a b -> Source m a -> m bSource
Convert a FoldM
fold abstraction into a Sink.
NOTE: This requires ImpredicativeTypes in the code that uses it.
>>>
fromFoldM (FoldM ((return .) . (+)) (return 0) return) $ yieldMany [1..10]
55
toFoldM :: Monad m => Sink a m r -> (forall s. FoldM (EitherT s m) a s -> EitherT s m s) -> m rSource
Convert a Sink into a FoldM
, passing it into a
continuation.
>>>
toFoldM sumC (\f -> Control.Foldl.foldM f [1..10])
55
sourceTChan :: forall a. TChan a -> Source STM aSource
A Source for exhausting a TChan, but blocks if it is initially empty.
sourceTQueue :: forall a. TQueue a -> Source STM aSource
sourceTBQueue :: forall a. TBQueue a -> Source STM aSource