-- |
-- Module      : Streamly.Internal.Data.Pipe
-- Copyright   : (c) 2019 Composewell Technologies
-- License     : BSD3
-- Maintainer  : streamly@composewell.com
-- Stability   : experimental
-- Portability : GHC
--
-- There are three fundamental types that make up a stream pipeline:
--
-- * Stream: sources
-- * Scan: transformations
-- * Fold: sinks
--
-- Streams are sources or producers of values, multiple sources can be merged
-- into a single source but a source cannot be split into multiple stream
-- sources.  Folds are sinks or consumers, a stream can be split and
-- distributed to multiple folds but the results cannot be merged back into a
-- stream source again. Scans are simple one-to-one transformations with
-- filtering. One element cannot be transformed to multiple elements.
--
-- The Pipe type is a super type of all the above, it is the most complex type.
-- All of these can be represented by a pipe. A pipe can act as a source or a
-- sink or a transformation, dynamically. A stream source can be split and
-- distributed to multiple pipes each pipe can apply its own transform on the
-- stream and the results can be merged back into a single pipe. Pipes can be
-- attached to a source to produce a source or they can be attached to a fold
-- to produce a fold, or multiple pipes can be merged or zipped into a single
-- pipe.
--
-- > import qualified Streamly.Internal.Data.Pipe as Pipe

module Streamly.Internal.Data.Pipe
    (
      module Streamly.Internal.Data.Pipe.Type
    )
where

import Streamly.Internal.Data.Pipe.Type