DeriveFoldable treatment of tuples is surprising

Jake McArthur jake.mcarthur at gmail.com
Tue Mar 21 21:05:19 UTC 2017


I think it's a question of what one considers consistent. Is it more
consistent to treat tuples as transparent and consider every component with
type `a`, or is it more consistent to treat tuples as opaque and reuse the
existing Foldable instance for tuples even if it might cause a compile time
error?

On Tue, Mar 21, 2017, 4:34 PM David Feuer <david.feuer at gmail.com> wrote:

> This seems much too weird:
>
> *> :set -XDeriveFoldable
> *> data Foo a = Foo ((a,a),a) deriving Foldable
> *> length ((1,1),1)
> 1
> *> length $ Foo ((1,1),1)
> 3
>
> I've opened Trac #13465 [*] for this. As I write there, I think the
> right thing is to refuse to derive Foldable for a type whose Foldable
> instance would currently fold over components of a tuple other than
> the last one.
>
> I could go either way on Traversable instances. One could argue that
> since all relevant components *must* be traversed, we should just go
> ahead and do that. Or one could argue that we should be consistent
> with Foldable and refuse to derive it.
>
> What do you all think?
>
> [*] https://ghc.haskell.org/trac/ghc/ticket/13465
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/glasgow-haskell-users/attachments/20170321/7b31ec47/attachment.html>


More information about the Glasgow-haskell-users mailing list