Warn against using 'fail' directly in user-code

Ganesh Sittampalam ganesh at earth.li
Fri Dec 20 17:27:48 UTC 2013


On 16/12/2013 16:50, Herbert Valerio Riedel wrote:
> On 2013-12-16 at 14:54:53 +0100, Andreas Abel wrote:
>> On 16.12.2013 14:12, Roman Cheplyaka wrote:
>>>>> The purpose of 'fail' is to handle monadic pattern-match failures.
>>>>> I consider explicit use of 'fail' in user code a hack.
>>>
>>> I treat 'fail' as a semi-private method of the Monad class. I may
>>> override it, but I should never call it. It only exists for the
>>> compiler.
>>
>> This is useful information.  Please add it to the documentation.  That
>> would definitely help newcomers to get some orientation in the design
>> space of exceptions...
> 
> [...]
> 
> If this is really the intent of `fail`, shouldn't we then also attach a
> 
>   {-# WARNING fail "Monad(fail) is not supposed to be called directly" #-}
> 
> to the `fail` method definition to help catch illegal uses of `fail` in
> user code?
> 
> (Fwiw, I've tested attaching such a warning to `fail` in GHC HEAD's
> libraries/base/GHC/Base.lhs and it seems to work just fine so far... so
> if there's consensus, we could add that for GHC 7.8)

I'm not sure I follow the logic of this. If it does continue to exist,
what are the arguments against using it explicitly?

Cheers,

Ganesh



More information about the Libraries mailing list