-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Stream Processer Arrow
--   
--   A continuation-based stream processor implemented as an Arrow. This
--   version generalizes the SP type described in John Hughes "Generalising
--   Monads to Arrows" to function as a wrapper for arbitrary monads.
@package streamproc
@version 1.6.2


-- | A continuation-based monadic stream processor implemented as an
--   <a>Arrow</a>.
--   
--   References:
--   
--   <ul>
--   <li>John Hughes, "<i>Generalising Monads to Arrows</i>":
--   <a>http://www.ittc.ku.edu/Projects/SLDG/filing_cabinet/Hughes_Generalizing_Monads_to_Arrows.pdf</a></li>
--   <li>Magnus Carlsson, Thomas Hallgren, "Fudgets--Purely Functional
--   Processes with applications to Graphical User Interfaces":
--   <a>http://www.cs.chalmers.se/~hallgren/Thesis/</a></li>
--   </ul>
module Control.Arrow.SP

-- | A generic stream processor.
data SP m i o
Put :: o -> (SP m i o) -> SP m i o
Get :: (i -> SP m i o) -> SP m i o
Block :: (m (SP m i o)) -> SP m i o

-- | Evaluate a stream processor.
runSP :: Monad m => SP m () () -> m ()

-- | Use a monadic transformer to map a stream.
mapSP :: (Monad m) => (i -> m o) -> SP m i o
instance GHC.Base.Monad m => Control.Arrow.Arrow (Control.Arrow.SP.SP m)
instance GHC.Base.Monad m => Control.Arrow.ArrowLoop (Control.Arrow.SP.SP m)
instance GHC.Base.Monad m => Control.Category.Category (Control.Arrow.SP.SP m)
instance GHC.Base.Monad m => Control.Arrow.ArrowZero (Control.Arrow.SP.SP m)
instance GHC.Base.Monad m => Control.Arrow.ArrowPlus (Control.Arrow.SP.SP m)
instance GHC.Base.Monad m => Control.Arrow.ArrowChoice (Control.Arrow.SP.SP m)
