I meant to say that it would be easy to do it just as you were thinking, using `folds`, if `Control.Monad.Trans.Free` had a function :: f r -> FreeT f m r. There isn't any reason why it doesn't
elevate :: (Monad m, Functor f) => f r -> FreeT f m r elevate = FreeT . return . Free . fmap return Then we get \op seed out -> folds op seed out . elevate :: Monad m => (x -> a -> x) -> x -> (x -> b) -> Producer a m r -> Producer b m r as you planned. -- You received this message because you are subscribed to the Google Groups "Haskell Pipes" group. To unsubscribe from this group and stop receiving emails from it, send an email to haskell-pipes+unsubscr...@googlegroups.com. To post to this group, send email to haskell-pipes@googlegroups.com.