I'm trying to learn how to parse files with Pipes, using Pipes.Aeson and 
Pipes.Parse. I'm a bit bewildered by the library - it seems quite complex, 
and I couldn't find too many examples of how it should be used.

For example:

I have a file containing several JSON objects all of the same type. I'd 
like to read them into my program one-at-a-time and reduce them down to 
some value.
>From the documentation it looks like I should be using foldAll to do this. 
foldAll returns a Parser.

However, the decode function in Pipes.Aeson has the type decode :: (Monad 
m, FromJSON a) => Parser ByteString m (Either DecodingError a) so it also 
returns a Parser.

I've written my own function that extracts a field from a parsed JSON 
object, which has type :: Parser ByteString IO (Either DecodingError Double), 
and a second function of type :: Parser Double IO Double (and body foldAll 
max 0 id).

Is it possible to compose these into a single parser of type :: Parser 
ByteString IO (Either DecodingError Double)? The intention being that I 
extract the field from all the objects in the file, then find the maximum.

Eventually I want to be able to run evalStateT on a Parser and a Producer, 
but I'm having difficulties creating the Parser.

I'm sure this either has a really simple solution or I'm approaching it in 
the wrong way. While I'm here - are there any good resources or projects I 
can read through that have used the Pipes.Parse (and maybe Pipes.Aeson) 
library? It'd be helpful to see what idiomatic usage of the libraries looks 
like.

-- 
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