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