-- | The names exported by this module are closely modeled on those in @Prelude@ and @Data.List@,
--    but also on
--    <http://hackage.haskell.org/package/pipes-4.1.9/docs/Pipes-Prelude.html Pipes.Prelude>,
--    <http://hackage.haskell.org/package/pipes-group-1.0.3/docs/Pipes-Group.html Pipes.Group>
--    and <http://hackage.haskell.org/package/pipes-parse-3.0.6/docs/Pipes-Parse.html Pipes.Parse>.
--    The module may be said to give independent expression to the conception of
--    Producer \/ Source \/ Generator manipulation
--    articulated in the latter two modules. Because we dispense with piping and
--    conduiting, the distinction between all of these modules collapses. Some things are
--    lost but much is gained: on the one hand, everything comes much closer to ordinary
--    beginning Haskell programming and, on the other, acquires the plasticity of programming
--    directly with a general free monad type. The leading type, @Stream (Of a) m r@ is chosen to permit an api
--    that is as close as possible to that of @Data.List@ and the @Prelude@.
--
--    Import qualified thus:
--
-- > import Streaming
-- > import qualified Streaming.Prelude as S
--
--    For the examples below, one sometimes needs
--
-- > import Streaming.Prelude (each, yield, next, mapped, stdoutLn, stdinLn)
-- > import Data.Function ((&))
--
--   Other libraries that come up in passing are
--
-- > import qualified Control.Foldl as L -- cabal install foldl
-- > import qualified Pipes as P
-- > import qualified Pipes.Prelude as P
-- > import qualified System.IO as IO
--
--     Here are some correspondences between the types employed here and elsewhere:
--
-- >               streaming             |            pipes               |       conduit       |  io-streams
-- > -------------------------------------------------------------------------------------------------------------------
-- > Stream (Of a) m ()                  | Producer a m ()                | Source m a          | InputStream a
-- >                                     | ListT m a                      | ConduitM () o m ()  | Generator r ()
-- > -------------------------------------------------------------------------------------------------------------------
-- > Stream (Of a) m r                   | Producer a m r                 | ConduitM () o m r   | Generator a r
-- > -------------------------------------------------------------------------------------------------------------------
-- > Stream (Of a) m (Stream (Of a) m r) | Producer a m (Producer a m r)  |
-- > --------------------------------------------------------------------------------------------------------------------
-- > Stream (Stream (Of a) m) r          | FreeT (Producer a m) m r       |
-- > --------------------------------------------------------------------------------------------------------------------
-- > --------------------------------------------------------------------------------------------------------------------
-- > ByteString m ()                     | Producer ByteString m ()       | Source m ByteString  | InputStream ByteString
-- > --------------------------------------------------------------------------------------------------------------------
-- >
module Streaming.Prelude.Linear
  ( module Streaming.Linear.Internal.Type,
    module Streaming.Linear.Internal.Consume,
    module Streaming.Linear.Internal.Interop,
    module Streaming.Linear.Internal.Many,
    module Streaming.Linear.Internal.Process,
    module Streaming.Linear.Internal.Produce,
  )
where

import Streaming.Linear.Internal.Consume
import Streaming.Linear.Internal.Interop
import Streaming.Linear.Internal.Many
import Streaming.Linear.Internal.Process
import Streaming.Linear.Internal.Produce
import Streaming.Linear.Internal.Type