content: -- |
  -- 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
  