Future of "Text.Show.Functions" module

Malcolm Wallace malcolm.wallace at me.com
Sun Oct 19 13:55:17 UTC 2014


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).

Nevertheless, it was found many years ago that lots of people defined this instance as a convenience, or a debugging aid.  And once it accidentally gets into two different released libraries, the orphans conflict, and the libraries become unusable together.  This is why a single "standard" orphan was thought preferable to multiple conflicting orphans.

In summary, if you want this instance, you should know that it is problematic, and that you need to import it explicitly.

Regards,
    Malcolm


More information about the Libraries mailing list