That works perfectly in my toy example, but doesn't work in my working
example because of the structure of it.  I am going to rethink my design a
bit and see if I can't make this work.  Thank you!


On Wed, Jul 30, 2014 at 5:15 PM, Gabriel Gonzalez <[email protected]>
wrote:

>  Instead of returning a `Producer` from your `Parser`, just consume the
> parsed stream directly using `toParser` or `toParser_` from `Pipes.Parse`:
>
>     toParser :: Monad m => Consumer (Maybe a) m r -> Parser a m r
>     toParser_ :: Monad m => Consumer a m X -> Parser a m ()
>
> For your code example specifically, you would probably want:
>
>     zoom (Pipes.Parse.span (/= "end")) (toParser_ Pipes.Prelude.print)
>
>
>
> On 7/30/14, 1:26 PM, David McBride wrote:
>
>  In a larger program I have to parse events, and one of the events has a
> start and end delimiter and then an unknown number of events in between.
> Sounds like a job for pipes-parse.  Here's some stripped down code to show
> what I intended.
>
> {-# LANGUAGE OverloadedStrings, LambdaCase  #-}
>
> import Pipes
> import Pipes.Parse
> import Pipes.Prelude
>
> import Data.Text
>
> import Control.Monad.State.Strict
>
> import Control.Lens
>
> getnums :: (Functor m, Monad m) => Parser Text m (Producer Text m ())
> getnums = do
>   draw >>= \case
>     (Just "start") -> do
>
>       nums <- zoom (Pipes.Parse.span (/= "end")) $ do
>         undefined  :: Parser Text m (Producer Text m ())
>
>       void skip
>
>       return nums
>     _       -> undefined
>
> testgetnums :: IO ()
> testgetnums = do
>   (p,rest) <- runStateT getnums $ Pipes.each
> ["start","1","2","3","4","end","morestuff"]
>   runEffect $ p >-> Pipes.Prelude.print
>   -- expected to print out roughly -> 1 2 3 4, with a rest producer that
> has morestuff in it.
>
>  My goal is to end up with a producer that produces the numbers, without
> the start or end events.  I could just use drawAll and put its result into
> Pipes.each, but it seems like I should be able to use zoom (span (/=
> "end")) to get a parser that just has the numbers in it, and then somehow
> turn that into a producer that I can return.
>
>  Am I even taking the right approach to this?  Or should I be turning to
> pipes group somehow?  I tried that and felt like I didn't even get close to
> a solution.
>  --
> 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 [email protected].
> To post to this group, send email to [email protected].
>
>
>  --
> 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 [email protected].
> To post to this group, send email to [email protected].
>

-- 
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 [email protected].
To post to this group, send email to [email protected].

Reply via email to