You're welcome!
On 7/31/14, 10:04 AM, David McBride wrote:
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] <mailto:[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]
<mailto:[email protected]>.
To post to this group, send email to
[email protected]
<mailto:[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]
<mailto:[email protected]>.
To post to this group, send email to
[email protected]
<mailto:[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]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[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].