úÎUšL?œ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›None 2346=EHKM!The type of Source should recall foldM: .Monad m => (a -> b -> m a) -> a -> [b] -> m a œ[ is used to signal short-circuiting of the pipeline. And if it weren't for conduits like j/, we wouldn't even need that most of the time.-Sources form a Monad that behaves a lot like ListT; for example: {do line <- sourceFile "foo.txt" liftIO $ putStrLn $ "line: " ++ show line x <- yieldMany [1..10] return (x, line) oThe above Source yields a series of pairs, proving ten copies of each line from the file plus an index number.8To skip to the next value in a Source, use the function  or $; to abort the whole pipeline, use  or ž. For example: xdo x <- yieldMany [1..10] if x == 2 || x == 9 then return x else if x < 5 then skip else abort This outputs the list [2].EOne difference from conduit is that monadic chaining of sources with Ÿƒ results in the values from the first source being used to determine how many values are generated by the next source, just like ListT:/sinkList $ yieldMany [1..3] >> yieldMany [4..6][4,5,6,4,5,6,4,5,6]NTo achieve the same behavior as conduit, use the Monoid instance for Sources:/sinkList $ yieldMany [1..3] <> yieldMany [4..6] [1,2,3,4,5,6]!Sequence a collection of sources.?sinkList $ sequenceSources [yieldOne 1, yieldOne 2, yieldOne 3] [[1,2,3]]  Compose a  and a  into a new k. Note that this is just flipped function application, so ($) can be used to achieve the same thing.  Compose a  and a  into a new `. Note that this is just function composition, so (.) can be used to achieve the same thing.  Compose a  and a ‚ and compute the result. Note that this is just flipped function application, so ($) can be used to achieve the same thing. gPromote any sink to a source. This can be used as if it were a source transformer (aka, a conduit):9sinkList $ returnC $ sumC $ mapC (+1) $ yieldMany [1..10][65] Note that   is a synonym for .˙ Most of the time conduit will pass through the fold variable unmolested, but sometimes you need to ignore that variable and use your own within that stage of the pipeline. This is done by wrapping the fold variable in a tuple and then unwrapping it when the conduit is done.  makes this transparent.lį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.>Zip sinks together. This function may be used multiple times:>let mySink s = sink () $ \() x -> liftIO $ print $ s <> show xNzipSinks sinkList (zipSinks (mySink "foo") (mySink "bar")) $ yieldMany [1,2,3]"foo: 1""bar: 1""foo: 2""bar: 2""foo: 3""bar: 3"([1,2,3],((),()))‰Note that the two sinks are run concurrently, so watch out for possible race conditions if they try to interact with the same resources.‘Keep taking from an MVar (Maybe a) until it yields  .’Keep taking from an TMVar (Maybe a) until it yields  .“#Send incoming values to all of the SinkB providing, and ultimately coalesce together all return values.Implemented on top of ZipSink&, see that data type for more details.• Convert a Ą fold abstraction into a Sink.@NOTE: This requires ImpredicativeTypes in the code that uses it.JfromFoldM (FoldM ((return .) . (+)) (return 0) return) $ yieldMany [1..10]55–Convert a Sink into a Ą$, passing it into a continuation.2toFoldM sumC (\f -> Control.Foldl.foldM f [1..10])55—EA Source for exhausting a TChan, but blocks if it is initially empty.´ ĸ !"#$%&'()*+,-./0123456789:;<=>?@ŖABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–¤—˜™š›Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšœ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ“   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’”•–—˜™š›° ĸ !"#$%&'()*+,-./0123456789:;<=>?@ŖABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–¤—˜™š›Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩš   ē      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖĄ¤ĨĄĻ§Ą¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅsimple-conduit-0.4.0Conduit.SimpleControl.Monad.Trans.ClassliftZipSink getZipSinkSinkConduitSource runSourcesequenceSources$==$$$ awaitForeverreturnCabortskipconduitsink conduitWithsource yieldMany sourceListunfoldC enumFromToCiterateCrepeatC replicateC sourceLazyrepeatMC repeatWhileMC replicateMC sourceHandle sourceFilesourceIOHandlestdinC initRepeat initReplicate sourceRandom sourceRandomNsourceRandomGensourceRandomNGensourceDirectorysourceDirectoryDeepdropCdropCE dropWhileC dropWhileCEfoldCfoldCEfoldlCfoldlCEfoldMapC foldMapCEallCallCEanyCanyCEandCandCEorCorCEelemCelemCEnotElemC notElemCEsinkLazysinkList sinkVector sinkVectorN sinkBuildersinkLazyBuildersinkNull awaitNonNullheadCElastClastCElengthClengthCE lengthIfC lengthIfCEmaximumC maximumCEminimumC minimumCEsumCsumCEproductC productCEfindCmapM_CmapM_CEfoldMCfoldMCE foldMapMC foldMapMCEsinkFile sinkHandle sinkIOHandleprintCstdoutCstderrCmapCmapCEomapCE concatMapC concatMapCEtakeCtakeCE takeWhileC takeWhileCE takeExactlyC takeExactlyCEconcatCfilterCfilterCE mapWhileC conduitVectorscanlCconcatMapAccumC intersperseC encodeBase64C decodeBase64CencodeBase64URLCdecodeBase64URLC encodeBase16C decodeBase16CmapMCmapMCEomapMCE concatMapMCfilterMC filterMCEiterMCscanlMCconcatMapAccumMC encodeUtf8C decodeUtf8ClineC lineAsciiCunlinesC unlinesAsciiClinesUnboundedC_linesUnboundedClinesUnboundedAsciiCzipSinkssourceMaybeMVarsourceMaybeTMVar sequenceSinksasyncC fromFoldMtoFoldM sourceTChan sourceTQueue sourceTBQueueuntilMCwhileMC either-4.3.1Control.Monad.Trans.EitherEitherTbase Data.Monoidmempty Control.MonadmzeroGHC.Base>> Data.MaybeNothing foldl-1.0.7 Control.FoldlFoldMrewrap produceList sourceSTM$fApplicativeZipSink$fFunctorZipSink$fFoldableSource$fMonadMaskSource$fMonadCatchSource$fMonadThrowSource$fMonadErroreSource$fMonadWriterwSource$fMonadStatesSource$fMonadReaderrSource$fMonadTransSource$fMonadIOSource$fMMonadSource$fMFunctorSource $fMonadSource$fMonadPlusSource$fApplicativeSource$fFunctorSource$fAlternativeSource$fMonoidSource$fSemigroupSource