Proposal: Add conspicuously missing Functor instances for tuples

Herbert Valerio Riedel hvriedel at gmail.com
Tue Jan 19 08:20:58 UTC 2016


On 2016-01-18 at 21:10:07 +0100, David Feuer wrote:
> For some reason I really can't imagine, it seems the only tuple type
> with a Functor instance is (,) a. I was astonished to find that
>
> fmap (+1) (1,2,3)
>
> doesn't work. Since this is *useful*, and there is *only one way to do
> it*, I propose we add the following:
>
> instance Functor ((,,) a b) where
>   fmap f (a,b,c) = (a,b,f c)
> instance Functor ((,,,) a b c) where
>   fmap f (a,b,c,d) = (a,b,c,f d)
> etc.

As stated elsewhere in this thread already, there is the issue about
consistency. Here's a relevant section from the Haskell 2010 report[1]:

> 6.1.4 Tuples
>
> ...
>
> However, every Haskell implementation must support tuples up to size
> 15, together with the instances for Eq, Ord, Bounded, Read, and Show.

IMO, we either have no `Functor` instances for tuples at all, or we have
them for all tuples up to size 15. The current situations of having them
defined only for 2-tuples is inconsistent.


Cheers,
  hvr

 [1]: https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1210006.1.4


More information about the Libraries mailing list