DeriveFoldable treatment of tuples is surprising
David Feuer
david.feuer at gmail.com
Tue Mar 21 20:34:20 UTC 2017
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
More information about the ghc-devs
mailing list