Let's do a 3-tuple because it doesn't require any contortions to find a real usecase.

type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t

if you want to return two results from a lens, by picking f = (,,) result1 result2 you can pass it a function

a -> (result1, result2, b)

and you'll get a function

s -> (result1, result2, t)

which modifies the structure using the supplied function and gives back both results and the final answer.

You could of course make up a completely one-off data type with local instances and a ton of boilerplate.

You could play games with nesting tuples, and get worse operational behavior and have an extra bottom and indirection to concern yourself with.

Or you could just use the only possible instance we can put on a 3-tuple for Functor.

-Edward

On Tue, Jan 19, 2016 at 3:32 PM, <amindfv@gmail.com> wrote:
El 19 ene 2016, a las 10:24, Alois Cochard <alois.cochard@gmail.com> escribió:

+1

Agree for consistency, I can also see those instances as being useful in some specific context, even if I agree with Andreas that in general they should be discouraged (especially for newcomers).


Can you give us an example where using e.g. the Functor instance for a 5-tuple would be the correct/best design decision?

Tom



On 19 January 2016 at 09:20, Herbert Valerio Riedel <hvriedel@gmail.com> wrote:
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
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries



--
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries