
On 14/09/2011, at 1:44 PM, Chris Smith wrote:
On Wed, 2011-09-14 at 13:35 +1200, Richard O'Keefe wrote:
I would like to have
tuple (f1,f2) x = (f1 x, f2 x) tuple (f1,f2,f3) x = (f1 x, f2 x, f3 x)
There is no polymorphism across tuple structures,
I know that. I know how tuples get to be instances of Ix, one instance declaration for each of (,) (,,) (,,,) ....
so if you absolutely *must* have n-tuples instead of nested 2-tuples, then you just need to implement the new functions as needed. You can't implement that only once.
I don't *expect* to implement anything just once. I am perfectly happy writing as many instance declarations as I have tuple sizes that I care about. It's just that I can't see how to get the types right, because in class Thingy t ... where tuple :: t -> a -> b b depends on t and possibly a, so instance Thingy (,,) where tuple (f,g,h) x = (f x, g x, h x) it's not an arbitrary b. Can this be done with functional dependencies?