<div dir="ltr">The Text.Libyaml[1] module provides a streaming interface, which allows more flexibility and doesn't jump through the aeson Value type at all. Currently, it doesn't include location information, but I _think_ the underlying libyaml C library makes that information available. I'd certainly be open to a PR to add something like:<div><br></div><div>decodeWithPosition :: ByteString -> Producer m (Event, Position)</div><div><br></div><div>And that way you don't have to rewrite a parser or the FFI bindings.<br><div><br></div><div>[1] <a href="https://www.stackage.org/haddock/lts-7.7/yaml-0.8.20/Text-Libyaml.html">https://www.stackage.org/haddock/lts-7.7/yaml-0.8.20/Text-Libyaml.html</a></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 3, 2016 at 11:47 AM, Tobias Dammers <span dir="ltr"><<a href="mailto:tdammers@gmail.com" target="_blank">tdammers@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello cafe,<br>
<br>
I have a bit of a conundrum here.<br>
<br>
The situation is such that I'm using the YAML package to parse YAML<br>
configuration files; some of the values in the file format require<br>
further parsing (using my own ginger library), and all that works fine.<br>
<br>
One problem though; since this is aimed at end users, I want to preset<br>
error messages that pinpoint the exact error location in case the ginger<br>
parse fails. However, the ginger parser doesn't get to see the entire<br>
YAML source, because it runs on just an individual string value inside<br>
the YAML, and the YAML parser itself doesn't report source positions<br>
either. The unfortunate result is that while I get "technically correct"<br>
parser errors from Ginger, the source positions they report are relative<br>
to the string value, i.e., all errors are reported as being on line 1 of<br>
an unnamed source file.<br>
<br>
The relevant code is here:<br>
<br>
<a href="https://github.com/tdammers/sprinkles/blob/master/src/Web/Sprinkles/Replacement.hs#L40" rel="noreferrer" target="_blank">https://github.com/tdammers/<wbr>sprinkles/blob/master/src/Web/<wbr>Sprinkles/Replacement.hs#L40</a><br>
<br>
The only solution I can think of right now involves writing my own YAML<br>
parser, and probably also an Aeson drop-in replacement; I don't really<br>
want to do that though.<br>
<br>
Is there any other way to get what I want?<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Tobias Dammers - <a href="mailto:tdammers@gmail.com">tdammers@gmail.com</a><br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</font></span></blockquote></div><br></div>