<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Apr 9, 2014 at 11:13 PM, Michael Snoyman <span dir="ltr"><<a href="mailto:michael@snoyman.com" target="_blank">michael@snoyman.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="">And this is where I think the PVP is doing a disservice with its current wording. Users have this expectation, but it doesn't actually hold up in reality. Reasons why it may fail include:<br>

</div>

<div><br></div><div>* Typeclass instance leaking from transitive dependencies.</div><div>* Module reexports leaking from transitive dependencies.</div></div></div></div></blockquote><div><br></div><div>We're aware of these two issues and the PVP page mentions one of them. It should also mention the other together with a workaround. These issues seem rare however. I've never run into them.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>* Someone made a mistake in an upload to Hackage (yes, that really does happy, and it's not that uncommon).</div>

</div></div></div></blockquote><div><br></div><div>Nothing will help you in this case as a library author, as you cannot freeze your deps in your .cabal file, which would be the only option if you're worried about this.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">

<div>* The package you depend on doesn't itself follow the PVP, or so on down the stack.</div></div></div></div></blockquote><div><br></div><div>Sure. You don't get benefits from the PVP if people don't follow the PVP.</div>

<div><br></div><div>You second sentence suggests that there are other failure modes, I'd love to know about them so we can discuss them.</div><div><br></div><div>As I see it now there are two real failure modes (the first two you listed), one we can fix with tooling (make sure people follow the PVP), and one I don't think it's worth caring about (accidental uploads of broken stuff.)</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>So my point is: even though the *goal* of the PVP is to provide this guarantee, it *doesn't* provide this guarantee. Since we have a clear alternative that does provide this guarantee (version freezing), I think we should make it clear that the PVP does not solve all problems, and version freezing should be used.<br>

</div></div></div></div></blockquote><div><br></div><div>It provides the guarantee with the exceptions of you two first points, which don't worry me much as I've never seen them happen outside the Yesod ecosystem (i.e. they seem rare.) Version freezing is orthogonal to the stuff the PVP talks about so I think we will just confuse users by talking about it in the PVP. Perhaps you could put together a little "how to build" stuff guide and raise awareness of the issue that way?</div>

<div><br></div><div>-- Johan</div><div><br></div></div></div></div>