Deduction types fail in Haskell.

Viewed 80
class (Eq a) => My a where
    f:: (a,a) -> (a,a)

instance My Int where
    f (a,b) = (a,b)

instance My Char where
    f (a,b) = (a,b)

And "specialization for the pair". It makes compilation error and I don't know why. Please help to repair it and explain me why it is error.

instance (My a, My b) => My (a,b) where
    f ((a,b), (c,d)) = ( (f (a,b)), (f (c,d)) )

Error:

test.hs:11:31:
    Could not deduce (a ~ b)
    from the context (Eq (a, b), My a, My b)
      bound by the instance declaration at test.hs:10:10-33
      `a' is a rigid type variable bound by
          the instance declaration at test.hs:10:10
      `b' is a rigid type variable bound by
          the instance declaration at test.hs:10:10
    Expected type: (a, b)
      Actual type: (a, a)
    In the return type of a call of `f'
    In the expression: (f (a, b))
    In the expression: ((f (a, b)), (f (c, d)))
Failed, modules loaded: none.
2 Answers
Related