-- | Conduit combinators that make the type of a conduit unambiguous to the
-- compiler via proxies.
module Data.MediaBus.Conduit.TypeAnnotations
  ( annotateTypeC
  , annotateTypeCIn
  , annotateTypeCOut
  , annotateTypeSource
  , annotateTypeSink
  ) where

import Conduit

-- * Generic Conduits
-- | Annotate the type of a 'Conduit' where input and output are the same
annotateTypeC :: proxy a -> Conduit a m a -> Conduit a m a
annotateTypeC _ = id

-- | Annotate the input type of a 'Conduit'
annotateTypeCIn :: proxy a -> Conduit a m b -> Conduit a m b
annotateTypeCIn _ = id

-- | Annotate the output type of a 'Conduit'
annotateTypeCOut :: proxy b -> Conduit a m b -> Conduit a m b
annotateTypeCOut _ = id

-- | Annotate the output type of a 'Source'
annotateTypeSource :: proxy a -> Source m a -> Source m a
annotateTypeSource _ = id

-- | Annotate the input type of a 'Sink'
annotateTypeSink :: proxy a -> Sink a m r -> Sink a m r
annotateTypeSink _ = id