Proposal to solve the `EitherT` problem.

Gabriel Gonzalez gabriel439 at gmail.com
Wed Aug 14 17:43:33 CEST 2013


I echo Edward's sentiments.  If you disagree with Edward's design 
choices then you should vote with your code instead of your +1's by 
building and actively maintaining libraries that uphold your design 
principles.

I see all these hypothetical arguments that `Either` might cause 
somebody to accidentally use its monad instance once, ever, but let's 
consult the facts:

* Nobody here has even lifted a finger to write up a library with this 
hypothetical alternative to the `Either` without the `Monad` instance.  
This signals to me that the people arguing for removing the `Monad` 
instance don't actually care about this as much about this as they say 
they do.

* Nobody has ever come onto Haskell cafe, Stack Overflow, or /r/haskell 
and asked: "Where can I find an `Either` without the `Monad` instance?"  
This signals to me that most Haskell programmers don't actually want 
this "feature" as much as you say they do.

* Lots of Haskell programmers use Either and EitherT fluently for error 
handling without any confusion or programming mistakes.  My `errors` 
library is proof of that:

http://packdeps.haskellers.com/reverse/errors

The reason Edward's libraries are popular and so widely used is because 
they solve an *actual* need, not a hypothetical need.

On 08/14/2013 07:51 AM, Edward Kmett wrote:
> Like Maybe, Either has perfectly unambiguous semantics as a Monad as 
> well.
>
> It is only when you muddle the waters with this fail nonsense that you 
> need to choose between the Either monad and the Error monad. Error and 
> Either would be indistinguishable otherwise.
>
> Re: unfair. I tried to take the sting out of it with a ";)" as I was 
> really just trying to use it to indicate that the 'consistency with 
> the rest of transformers' ship had sailed given that MaybeT exists and 
> is within transformers.
>
> I was trying to fire off one last shot across the bow that in the big 
> 2.0 switch there was a move to make "State s" be "StateT s Identity" 
> that was mostly argued for code reuse and simplification reasons, that 
> it cut code duplication by a factor of 2 in the body of transformers 
> and the mtl and reduced the chance for human error.
>
> The fact that State s = StateT s Identity rather than merely being 
> isomorphic seems to me to be an emergent property of this change, not 
> its purpose.
>
> Ultimately, transformers is Ross's package, and the while maintainers 
> can poll and ask questions of the community and take the temperature 
> of the room it is fully his decision about how to move forward. 
> Whatever he decides goes.
>
> I'm just vociferously advocating for the least painful transition for 
> me personally and tend to favor the "don't rebikeshed" solution over 
> making changes for cosmetic reasons, because every single one of these 
> "lets standardize something from one of my packages but randomly 
> rename it" proposals induces a lot of accumulated work for me.
>
> I have come somewhat to dread the inevitable discussion when someone 
> pops up on the mailing list here asking to standardize something from 
> one of my packages. It seems it inevitably loses features, gets 
> bikeshedded or otherwise broken in such a way that creates work for me 
> and others. I still want to help with getting things out to a larger 
> audience, but I prefer to do so in a way that doesn't break code 
> gratuitously, or worse force users into a choice between the old and 
> the new. However, that is wandering quite a bit off topic.
>
> -Edward
>
>
>
> On Wed, Aug 14, 2013 at 3:42 AM, Daniel Trstenjak 
> <daniel.trstenjak at gmail.com <mailto:daniel.trstenjak at gmail.com>> wrote:
>
>
>     On Tue, Aug 13, 2013 at 06:57:22PM -0400, Edward A Kmett wrote:
>     > I look forward to finding out the new name for MaybeT then. ;)
>
>     That's a bit unfair, because the Maybe data type has a clear meaning
>     which also holds for its Monad instance.
>
>     That's not the case for Either. The Either data type doesn't propose
>     a special meaning to the 'Left' or 'Right' case, but the Monad
>     instance of Either does.
>
>     Isn't just having a discussion about such a contradiction at the end
>     the reason why Haskell is the language it is?
>
>
>     Greetings,
>     Daniel
>
>     _______________________________________________
>     Libraries mailing list
>     Libraries at haskell.org <mailto:Libraries at haskell.org>
>     http://www.haskell.org/mailman/listinfo/libraries
>
>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20130814/537ada92/attachment.htm>


More information about the Libraries mailing list