MonadFail instance for Either

Edward Kmett ekmett at gmail.com
Thu Oct 25 13:45:40 UTC 2018


While I’m weakly against the IsString version, I’m pretty strongly against both of these variants. They actively get in the way of a user who wants to treat the parameter uniformly.

-Edward

> On Oct 25, 2018, at 8:06 AM, Daniel Bergey <bergey at teallabs.org> wrote:
> 
> I meant something like 
> 
> foo :: MonadFail m => A -> m Foo
> 
> Sorry if my first version without input caused confusion.
> 
>> On October 25, 2018 11:48:44 AM UTC, Daniel Bergey <bergey at alum.mit.edu> wrote:
>> 
>> When a library provides a funct
>> foo :: MonadFail m => m Foo
>> 
>> I usually want to recover from failure while logging the failure
>> message. I can do this with the IO instance, but then it's not obvius
>> that all errors are getting caught. If I'm not in IO, and I want the
>> error text, I think I'm out of luck.
>> 
>> On October 25, 2018 7:21:51 AM UTC, David Feuer <david.feuer at gmail.com>
>> wrote:
>>> Another option is to be agnostic about it with FlexibleInstances:
>>> 
>>>   instance MonadFail (Either [Char]) where
>>>     fail = Left
>>> 
>>> That'll work today, and leave the question of the ultimate constraint
>>> open.
>>> It's not Haskell 2010, but no one can take advantage of that fact.
>>> 
>>> I'm only raising that as an option; I don't really like it terribly
>>> much.
>>> 
>>>> On Thu, Oct 25, 2018, 3:05 AM Edward Kmett <ekmett at gmail.com> wrote:
>>>> 
>>>> I'm also weakly inclined against it.
>>>> 
>>>> If we decided we really wanted something, then building a class that
>>> was
>>>> just for this purpose might work, sort of an updated version of the
>>> old
>>>> 'Error' class from transformers, but now limited to just the failure
>>> string
>>>> so it has no extra baggage.
>>>> 
>>>> On the other hand, that then faces inertia problems all its own.
>>>> 
>>>> -Edward
>>>> 
>>>> On Wed, Oct 24, 2018 at 11:42 PM David Feuer <david.feuer at gmail.com>
>>>> wrote:
>>>> 
>>>>> FWIW, I think I'm weakly opposed. Either is Haskell 98. MonadFail
>> is
>>>>> solidly "standards-track" material, to the extent that designation
>>> is
>>>>> meaningful
>>>>> at the moment. IsString ... isn't.
>>>>> On Wed, Oct 24, 2018 at 10:44 PM Daniel Bergey
>> <bergey at alum.mit.edu>
>>>>> wrote:
>>>>>> 
>>>>>> Is there still consensus in favor of adding this instance?
>>>>>> 
>>>>>> instance IsString str => MonadFail (Either str) where
>>>>>>    fail = Left . fromString
>>>>>> 
>>>>>> In 2016 there was some discussion, and my reading is that there
>>> was
>>>>> consensus in favor at the time:
>>>>>> Trac: https://ghc.haskell.org/trac/ghc/ticket/12160
>>>>>> libaries mailing list:
>>>>> 
>> https://mail.haskell.org/pipermail/libraries/2016-August/027248.html
>>>>>> 
>>>>>> Does anyone know of a later decision not to add it, or was it
>>> simply no
>>>>> one's top priority?
>>>>>> 
>>>>>> What is the next step to move this proposal forward?  Is more
>>>>> discussion in order?  Should I just submit a patch?
>>>>>> 
>>>>>> Thanks,
>>>>>> bergey
>>>>>> _______________________________________________
>>>>>> Libraries mailing list
>>>>>> Libraries at haskell.org
>>>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>>>> _______________________________________________
>>>>> Libraries mailing list
>>>>> Libraries at haskell.org
>>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>>>> 
>>>> 


More information about the Libraries mailing list