glazier-pipes-0.1.0.0: src/Glazier/Pipes/Lazy.hs
module Glazier.Pipes.Lazy where
import Control.Monad.State.Lazy
import qualified Glazier.Lazy as G
import qualified Pipes as P
import Control.Lens
-- | Converts a Gadget into a Pipe
gadgetToPipe :: (Monad m, MonadTrans t, MonadState s (t m)) => G.Gadget s m a c -> P.Pipe a c (t m) r
gadgetToPipe g = forever $ do
a <- P.await
s <- get
~(c, s') <- lift . lift $ view G._GadgetT g a s
put s'
P.yield c