
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,
El 19 ene 2016, a las 10:24, Alois Cochard
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
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... _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- *Λ\ois* http://twitter.com/aloiscochard http://github.com/aloiscochard
_______________________________________________ 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