
On 19/10/14 22:00, Michael Snoyman wrote:
On Sun, Oct 19, 2014 at 4:55 PM, Malcolm Wallace
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 \"\
\" -- -----------------------------------------------------------------------------
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