<div dir="ltr">And yet, because many of the users of the library are just using Either, both will still probably have to exist anyways unless Gabriel also wants to raise a similar hue and cry. <div><br></div><div>My experience from talking to folks is that they start using errors with Either and then upgrade to EitherT since they already know how to use the basic combinators. The loss of that pedagogical vector to adoption would be a rather big blow to the adoption of the package.<div>
<br></div><div>The nature of those combinators is that people use them to reduce the noise in their code. EitherT e Identity is noisier than Either to pattern match on and work with when you&#39;re done tossing code through errors combinators.</div>
</div><div><br></div><div>-Edward</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 15, 2013 at 10:50 AM, Ross Paterson <span dir="ltr">&lt;<a href="mailto:R.Paterson@city.ac.uk" target="_blank">R.Paterson@city.ac.uk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, Aug 14, 2013 at 10:51:01AM -0400, Edward Kmett wrote:<br>
&gt; I was trying to fire off one last shot across the bow that in the big 2.0<br>
&gt; switch there was a move to make &quot;State s&quot; be &quot;StateT s Identity&quot; that was<br>
&gt; mostly argued for code reuse and simplification reasons, that it cut code<br>
&gt; duplication by a factor of 2 in the body of transformers and the mtl and<br>
&gt; reduced the chance for human error.<br>
&gt;<br>
&gt; The fact that State s = StateT s Identity rather than merely being isomorphic<br>
&gt; seems to me to be an emergent property of this change, not its purpose.<br>
<br>
</div>I think there&#39;s still mileage in that argument.  For example, the module<br>
Control.Error.Safe in the errors package has 13 functions of the form<br>
<br>
        fooErr :: e -&gt; args -&gt; Either e r<br>
<br>
and another 13 of the form<br>
<br>
        tryFoo :: Monad m =&gt; e -&gt; args -&gt; EitherT e m r<br>
<br>
If the recommended base exception monad were a specialization of the<br>
recommended transformer, only one set would be needed.<br>
<div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/libraries" target="_blank">http://www.haskell.org/mailman/listinfo/libraries</a><br>
</div></div></blockquote></div><br></div>