Future of "Text.Show.Functions" module

Roman Cheplyaka roma at ro-che.info
Sun Oct 19 21:25:17 UTC 2014


On 19/10/14 22:00, Michael Snoyman wrote:
> On Sun, Oct 19, 2014 at 4:55 PM, Malcolm Wallace <malcolm.wallace at me.com>
> wrote:
> 
>>
>> On 19 Oct 2014, at 11:20, Herbert Valerio Riedel wrote:
>>
>>>  -- This module deliberately declares orphan instances:
>>>  {-# OPTIONS_GHC -fno-warn-orphans #-}
>>>
>>>  -- | Optional instance of 'Text.Show.Show' for functions:
>>>  --
>>>  -- > instance Show (a -> b) where
>>>  -- >    showsPrec _ _ = showString \"\<function\>\"
>>>  --
>>>
>> -----------------------------------------------------------------------------
>>> Should this module be
>>> deprecated, removed, alternatively, should the `Show` instance be made a
>>> non-orphan (e.g. by importing it by the `Prelude` module), or shall this
>>> curiousity be just left untouched in `base` in its current form?
>>
>>
>> Under no circumstances should this instance ever be visible from the
>> Prelude.
>>
>> It was deliberately made an orphan because the instance is non-conformant
>> to the intended semantics of the Show class.  Having a default instance of
>> Show for functions would be a disaster, by causing static type error
>> messages that indicate an arity problem, to become erratic runtime
>> behaviours instead (without even throwing an exception).
>>
>>
> While I'm sensitive to this position (thus my very reluctant +0.5 on
> merging into Prelude), I don't see the "disaster" you're referring to. The
> only case I can picture where this might happen is when you have a value
> that you are *only* ever displaying, not using in any other way. But won't
> it become painfully obvious very quickly that you messed up?

A simple example would be using show to produce debug output like this:

  debug $ show $ f x1 x2 ...

where you missed some of the arguments for f.

For the record, I agree with Malcolm's reasoning and would like the
instance to be left as it is now.

Roman


More information about the Libraries mailing list