Byte stream types shouldn't have much advantage over regular
lazy bytestring here since aeson `decode`, which is defined
using `Attoparsec.parse` will be the more expensive calculation,
and of course it accumulates whatever it needs, validating the input
before returning an answer. So there's not much point in giving it
a proper streaming io input.
The json-stream library does permit you to stream values as they
arise, /if/ all the pieces fit together.
This is really only convenient if for example the top level json value is
an array. I wrote a little helper for this, maybe you saw
The program at the top of the file uses it. But it all depends on the structure of the json
and what you are hoping to get from it. It is also simple to stream the elements of a
one subordinate array of a top level object, or to stream all the elements of
all the subordinate arrays of a top level array, forgetting anything else
about the element of the array these elements came from (I think that's the
case in my example, if I remember).
But trying to get more complex structure would require designing an
appropriate free monad for each case. (Maybe that's not so crazy though)
It isn't clear that something like `json-stream` doesn't violate the whole
idea of json, which envisages validation of the whole file as a condition of
parsing. The decision that named fields in an 'object' can
come in any order and can be missing and so on, is a mess
from a number of points of view, one of them being proper streaming.