Indeed, I don't care about the leftovers. Does this mean that my pipeline
should look like this:
myPipe :: Socket
-> Output Word8
-> Effect ErrorT ((ParsingError, Producer ByteString m ()) m) ()
myPipe s o = loop >-> toOutput o
where
loop = forever $ (errorP . parsed myParser $ fromSocket s 4096)
myParser = undefined -- some attoparsec parser
On Thursday, March 13, 2014 12:49:20 PM UTC-7, Danny Navarro wrote:
>
> Another thing to consider is whether you want to handle parsing errors
> and the leftovers. If you just want the parsing pipe to terminate when
> errors occur and you don't care about the leftovers when (or if) the
> pipe is done parsing, you may not need `pipes-parse` at all, and could
> get away just using `pipes` and `pipes-concurrency`.
>
> On Thu, Mar 13, 2014 at 8:02 PM, Renzo Carbonara
> <[email protected]<javascript:>>
> wrote:
> > On Thu, Mar 13, 2014 at 3:41 PM, Kai Wang <[email protected]<javascript:>>
> wrote:
> >> Hi:
> >>
> >> Suppose I have a Bytestring producer, I want to use
> >> pipes-attoparsec/binary/etc to parse this producer, and send the result
> to a
> >> pipes-concurrent output mailbox. What's the idiomatic to achieve this
> >> result? Is using "parse :: A.Parser a b -> P.Parser a m (Either
> ParsingError
> >> b)" (from pipes-attoparsec) the correct approach for this situation? or
> >> should I stick with "parsed :: A.Parser a b -> P.Producer a m r ->
> >> P.Producer b m (Either (ParsingError P.Producer a m r) r)" (also from
> >> pipes-attoparsec)
> >
> > Kai,
> >
> >
> > It depends on the contents of your original `ByteString` producer and
> > on how you want to deal with parsing errors.
> >
> > If your original `ByteString` producer contains consecutive raw
> > entries that can be parsed with nothing else in between them, then
> > `Pipes.Attoparsec.parsed` will work; you'll just have to take care of
> > matching the `Either (ParsingError, Producer a m r) r` return type
> > from this new producer with the other `Proxy`s in your pipeline. For
> > example, `pipes-concurrency`'s `toOutput`'s return value is
> > incompatible with said return type, but you could use
> > `Pipes.Lift.errorP` to reconcile them.
> >
> > Otherwise, if your original `ByteString` producer contains additional
> > content in between each raw entry or you want to deal with parsing
> > errors locally, then you should rely on `Pipes.Attoparsec.parse` and
> > the infrastructure provided by `pipes-parse.
> >
> >
> > Regards,
> >
> > Renzo Carbonara.
> >
> > --
> > 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] <javascript:>.
> > To post to this group, send email to
> > [email protected]<javascript:>.
>
>
--
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].