module Data.SouSiT (
    -- * Sink
    Sink,
    Fetch,
    input,
    inputOr,
    inputMap,
    inputMaybe,
    skip,
    liftSink,
    liftFetch,
    -- * Source
    Source,
    transfer,
    FeedSource,
    SimpleSource(..),
    feedToSink,
    ($$),
    (=+=),
    (=+|=),
    -- * Transform
    Transform,
    (=$=),
    (=$),
    ($=)
) where

import Data.SouSiT.Sink
import Data.SouSiT.Source
import Data.SouSiT.Transform
import Control.Monad.Identity


type Fetch i a = Sink i Identity a

-- | Lift the (pure) fetch sink into any monad.
liftFetch :: Monad m => Fetch i a -> Sink i m a
liftFetch = liftSink (return . runIdentity)